Spring配置类里面配置:
@Import({JdbcConfig.class,MybatisConfig.class})//手动导入
@EnableAspectJAutoProxy//启动AOP

通知类配置:

@Component
@Aspect
//匹配业务层的所有方法
    @Pointcut("execution(* com.itheima.service.*Service.*(..))")
      private void ServicePt(){}

    @Around("ServicePt()")
    public void runSpeed(ProceedingJoinPoint pjp) throws Throwable {
        Signature signature=pjp.getSignature();//签名信息
        //通过签名获取执行的类型(接口名)
        String ClassName=signature.getDeclaringTypeName();
        //通过签名获取执行操作的名称(方法名)
        String menthod=signature.getName();

        long start=System.currentTimeMillis();
        for (int i=0;i<10000;i++) {
            pjp.proceed();
        }
         long end=System.currentTimeMillis();
        System.out.println("业务层接口万次执行:"+ClassName+"."+menthod+"时间:"+(end-start)+"ms");

    }

测试类配置:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)

然后自动装配,需要的类对象,然后测试:

public class AccountServiceTestCase {
    @Autowired
    private AccountService accountService;
    @Test
    public void testFindById(){
        Account ac = accountService.findById(1);
        //System.out.println(ac);
    }
    @Test
    public void testFindAll(){
        List<Account> a=accountService.findAll();
        //System.out.println(a);
    }

作用:在原有的基础上,做到功能的增强。

 核心概念:代理:SpringAOP的核心本质是采用代理模式实现的。

连接点(JoinPoint):在SpringAOP中,理解为任意方法的执行。

切入点(Pointcut):匹配连接点的式子,也是共性功能的方法描述。

通知(Advice):若干个方法的共性功能,在切入点出执行,最终体现为一个方法。

切面(Aspect):描述通知与切入点的关系。

目标对象(Target):被代理的原始对象成为目标对象。

 

通知类型:

前置通知

后置通知

环绕通知(重点):

*环绕通知依赖形参ProceedingJoinPoint才能实现对原始方法的调用

*环绕通知可以隔离原始方法的调用执行

*环绕通知返回值设置Object类型

*环绕通知中可以对原始方法中出现的异常进行处理

返回后通知

抛出异常后通知