Spring中的Pointcuts,Advisors
使用Pointcuts可以配置被代理对象的哪些方法被代理.
使用Pointcust的好处:
1.如果不使用Pointcuts,就需要将判断逻辑硬编码到Advice里,这样Advice就与某些业务紧密耦合而无法复用.所以Pointcuts可以把方法是否需要被代理的判断逻辑与Advice进行解耦,同时实现了Advice的复用. 2.如果不使用Pointcusts,在每次执行Advice时都要进行判断,影响性能.而使用Pointcuts,每个方法只判断一次,之后就会将结果缓存起来.另外Spring在创建代理时会对那些不需要进行代理的方法进行优化,从而提高性能.当然如果Advice与实际业务确实是紧密相连,也不会被其它业务复用,将判断逻辑硬编码也未尝不可.
org.springframework.aop.Pointcut
public interface Pointcut { ClassFilter getClassFilter (); MethodMatcher getMethodMatcher();}
org.springframework.aop.ClassFilter
public interface ClassFilter { boolean matches(Class clazz);}
org.springframework.aop.MethodMather
public interface MethodMatcher { boolean matches(Method m, Class targetClass); boolean isRuntime(); boolean matches(Method m, Class targetClass, Object[] args);}
MethodMatcher分2类
- 静态
- 动态