spring AOP 实现性能测试实践

测试环境:spring boot +mybatis

1.任意编写一个sql查询语句:

 <select id="queryById" parameterType="String" resultMap="resultMap">
        select a.*  from gd_auths a   join gd_role_auths b on
           a.auth_id = b.auth_id
        where b.role_id = #{role_id}
 </select>

2.编写 @Mapper类

@Mapper
public interface AuthsMapper {

        List<Auths> queryById(String id);
}

3.编写 @Service实现类

@Service
public class AuthsServiceImpl implements AuthsService {

    @Autowired
    private AuthsMapper authsMapper;

    @Override
    public List<Auths> queryById(String id) {
        return  authsMapper.queryById(id);
    }

}

4.编写@controller类。

@RestController
@RequestMapping("/auths")
public class AuthsController {
    @Autowired
    private AuthsService authsService;
    @GetMapping("/list")
    public void getList(){

        List<Auths> list = authsService.queryById("932935269877944320");
	}
}

5.编写切片类

@Aspect
@Component
public class AspectAuthsService {
    //定义切入点
    @Pointcut("execution(* com.zhx.iptz.project.service.AuthsService.queryById(..))")
    public void pc(){};
    
    //环绕通知
    @Around("pc()")
    public void around(ProceedingJoinPoint pjp) throws Throwable {
		//记录方法执行前系统时间
        Long before = System.currentTimeMillis();
		//执行方法
        pjp.proceed();
		//记录方法执行后系统时间
        Long after = System.currentTimeMillis();
	
        Signature pjpSignature = pjp.getSignature();
		//获取执行方法所在的接口名
        String declaringTypeName = pjpSignature.getDeclaringTypeName();
		//获取执行的方法名
        String name = pjpSignature.getName();
		//打印输出
        System.out.println(declaringTypeName+"."+name+" runtime:"+(after-before)+"ms");


    }
}

这里使用的是环绕通知的方式,记录目标方法执行前后的系统时间,相减就能得到我们查询语句执行时间。
启动项目:访问controller中的url,在控制台查看打印输出。

com.project.service.impl.AuthsServiceImpl.queryById runtime:139ms

上述实现了应用spring AOP 实现对查询语句性能测试。

上一篇:spring 原注解


下一篇:MyBatis自动生成代码