Spring AOP之切面的配置

  

前面的文章中对SpringAOP进行了简单的实践,本章将说明在实际的开发中如何对切面进行配置使用。

  

一、春天中显示的配置ProxyFactory

  

1,直接使用的建议来作用到目标类的所有方法上

  
 <代码> & lt; !——配置建议——比;
  & lt; bean id=癱ustomAdvice”类="/比;
  & lt; !——目标对象——比;
  & lt; bean id=澳勘辍崩?"/比;
  & lt; !——配置代理工厂——比;
  & lt; bean id=按怼崩?皁rg.springframework.aop.framework.ProxyFactoryBean”
  p: proxyInterfaces=" com.xx。MyInterface”& lt; !——指定代理的接口——比;
  病人:interceptorNames=癱ustomAdvice”& lt; !——指定增强——比;
  p: target-ref="目标"/比;& lt; !——指定要代理的bean,在 
  

proxyInterfaces(接口):代理索要实现的接口,多个可用逗号分隔;
interceptorNames:目标对象列表,多个可用逗号分隔;
单:返回的代理是否为单例,默认是;
优化属性设置为真的,强制使用CGLib动态代理。
还可以使用属性proxyTargetClass指明是否是对类进行代理而不是接口,当设置为真时,使用CGLib动态代理并且无需再设置proxyInterfaces属性,即便设置也会被忽略;

  

除了上面说到的使用逗号来分隔多个增强外,还可以像下面这样使用

  
 <代码> & lt;属性名=癷nterceptorNames”比;
  & lt; list>
  & lt; idref当地=" advice1 "/比;
  & lt; idref当地=" advice2 "/比;
  & lt;/list>
  & lt;/property>  
  

2,通过自定义切面来应用增强

  
 <代码> & lt; bean id=癱ustomAdvice”class="/比;
  & lt; bean id=癱ustomAdvisor”类=癱om.custom.xx”
  p: advice-ref=" customAdvice "/比;& lt; !——定义切面——比;
  
  抽象& lt; bean id="基地"=" true " & lt; !——定义公共配置类——比;
  类=" org.springframework.aop.framework.ProxyFactoryBean "
  p: interceptorNames=" customAdvisor "/比;
  
  & lt; bean id=" proxy1 "父=盎亍眕: target-ref="/比;
  & lt; bean id=" proxy2 "父=盎亍眕: target-ref="/祝辞 
  

3,通过正则切面来应用增强

  
 <代码> & lt; bean id=皉egexAdvisor”
  类=" org.springframework.aop.support.RegexpMethonPointcutAdvisor "
  p: advice-ref=" customAdvice "
  & lt;属性名=澳J健北?
  & lt; list>
  & lt; value> *插入* & lt;/value>
  & lt;/list>
  & lt;/property>
  & lt;/bean>
  
  & lt; bean id="代理"
  类=" org.springframework.aop.framework.ProxyFactoryBean "
  p: interceptorNames=" regexAdvisor "
  p: target-ref=" "
  p: proxyTargetClass=" true "/比; 
  

二,春天的自动代理机制

  

上面的配置都需要显示的配置代理对象,对于小型的应用或不嫌麻烦的话还是可以接受的,大如果面对中大型的系统来讲,通过上面的配置来达到目的既容易出错,更是十分的麻烦,所以春天提供了自动代理机制,从而让开发人员从烦乱的配置中解脱出来。

  

自动代理机制是基于BeanPostProcessor实现,自动代创建器根据一些规则来自动在容器中实例化Bean时为匹配的豆生成代理实例。其代理创建器主要分3类为
1,基于豆配置名规则的自动代理创建器:允许为一组特定配置名的Bean自动创建代理实例,实现类为BeanNameAutoProxyCreator
2,基于顾问匹配机制的自动代理创建器:它对容器中所有的顾问进行扫描,自动将这些切面应用到匹配的Bean中(为目标Bean创建代理实例),实现类为DefaultAdvisorAutoProxyCreator。
3,基于Bean中AspectJ注解的自动代理创建器:为包含AspectJ注解的Bean自动创建代理实例,实现类为AnnotationAwareAspectJAutoProxyCreator。
 Spring AOP之切面的配置

  
BeanNameAutoProxyCreator
  
 <代码> & lt; bean类=皁rg.springframework.aop.framework.autoproxy.BeanNameAutoProyCreator”
  p: beanNames=" *呃”
  p: interceptorNames=" "
  p:优化=" true "/祝辞 
  
DefaultAdvisorAutoProxyCreator
  
 <代码> & lt; bean id=皉egexAdrisor”class="/比;
  & lt; bean类=" org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator "/祝辞 
  
AnnotationAwareAspectJAutoProxyCreator
  

1) XML配置来启用AnnotationAwareAspectJAutoProxyCreator

  
 <代码> & lt; !——使用@ aspectj注解定义的切面类——比;
  & lt; bean id=癮spectJAnnotationBean”类="/比;
  & lt; !——自动代理创建器,自动将@ aspectj注解切面类织入目标bean中——比;
  & lt; bean类=" org.springframework.aop.framework.autoproxy.AnnotationAwareAspectJAutoProxyCreator "/祝辞

Spring AOP之切面的配置