spring采用Annotation的方式对AOP的支持:
导入aspectj包
声明该类为切面:@aspect
<aop:aspectj-autoproxy/>启用注解的支持
创建4个对象:InvocationHandler类对象,目标类对象,切面对象,代理对象
AOP注解的动态代理:
1.首先我们目标类实现接口,
2.切面类标识@aspect
3.定义@PointCut标识哪些方法要用到advice, 这个pointcut是个空实现,且不能有参数签名:目标类中只要有PointCut过滤的方法就执行advice
4.用@Before("PonitCut"),执行invoke,把advice织入到目标类对应的方法中.
由于spring开启了AOP,且AOP中的切面类中已经声明了PointCut这个注解,那PointCut所过滤的方法只要在目标对象执行的方法中存在,那不会创建目标类,会创建目标类的代理对象,并通过代理对象的给目标对象的方法织入advice。这样就通过注解实现了AOP。
另外:由于已经创建了代理对象,那调用PointCut中没有存在的方法,依然会执行invoke,只是不会为该方法织入advice。