1、编写切点标识,比如一个注解
2、编写Advisor,类似被@AspectJ注解标准的类
3、可以看出Advisor需要有Pointcut和Advice
Pointcut就是切点,Advice就是通知
MethodInterceptor继承了Interceptor接口,Interceptor接口继承了Advice接口
4、上面Pointcut需要ClassFilter和MethodMatcher
ClassFilter用来匹配需要切哪些类
MethodMatcher用来匹配要切哪些方法,注意:如果你的方法没有参数,那么isRuntime需要返回false
5、最后要告诉Spring为我们生成代理对象
方法一:通过BeanNameAutoProxyCreator可以对批量的Bean进行AOP,并且指定了代理逻辑,指定了一个InterceptorName,也就是一个Advice,前提条件是这个Advice也得是一个Bean,这样Spring才能找到的,但是BeanNameAutoProxyCreator的缺点很明显,它只能根据beanName来指定想要代理的Bean
方法二:DefaultAdvisorAutoProxyCreator会直接去找所有Advisor类型的Bean,根据Advisor中的PointCut和Advice信息,确定要代理的Bean以及代理逻辑,
注意:setProxyTargetClass()方法,如果不设置,则默认为false,false则表示只代理目标接口,也就是说只使用JDK的动态代理,目标类没实现接口就会报错
设置为true,则表示如果该目标类是一个接口,将为给定接口创建一个 JDK 代理。如果该目标类是任何其他类,将为给定类创建一个 CGLIB 代理