springframework(十一)AOP之自动代理
2016-03-23 12:59
369 查看
Spring的Autoproxing (自动代理,注意必须使用ApplicaitonContext来获取bean才能进行自动代理,同时要将cglib.jar给加入到classpath中去)
自动代理可以不用为每一个目标对象那个手动定义代理对象,使用自动代理,您可以通过Bean的名称或者是Pointcut对比,自动为符合对比条件的目标对象建立代理对象。
1、BeanNameAutoProxyCreator
如果要提供的Advice的目标对象很多,这个时候,我们一个个的建立代理对象那个会是件很麻烦的事情,为此我们可以给目标对象取适当的bean的名称,例如某些服务对象取名为***Service,这样我们就可以使用org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator自动创建代理。
常见写法如下:
配置文件的定义:
[xhtml]
view plain
copy
<bean id="beforeAdvice" class="com.itcast.advice.LogBeforeAdvice"></bean>
<bean id="afterAdvice" class="com.itcast.advice.LogAfterAdvice"></bean>
<bean id="helloAdvise" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="mappedNames" >
<list>
<value>helloAaa</value>
<value>helloBbb</value>
</list>
</property>
<property name="advice" ref="beforeAdvice"></property>
</bean>
<bean id="beanNameAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>hello*</value>
</list>
</property>
<property name="interceptorNames" value="helloAdvise"></property>
</bean>
上边配置文件的意思就是凡是以hello开头的bean的方法被调用的时候都要经过helloAdvise这个advisor的处理。在helloAdvise中,对于helloAaa,helloBbb方法进行了beforeAdvice的拦截。
2、DefaultAdvisorAutoProxyCreator
Spring提供的自动代理建立者还有
org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator,只要我们在定义文件中加上DefaultAdvisorAutoProxyCreator的设置,在Bean的定义文件被读取完成之后,它会自动搜寻所有的advisor,并自动将Advisor应用至符合Pointcuts的目标对象身上。这种方式就带有随机性了。是否被advisor命中完全看advisor对bean的方法名称的匹配了。相当于我定义了一个全局的advisor。applicationContext.xml中声明的所有的bean中的方法被调用的时候,我都看一下advisor中对方法的匹配是否符合,如果符合就将advisor中的advice给应用上,拦截方法的处理。
实际编码的时候如下:
[xhtml]
view plain
copy
<bean id="autoProxy" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean>
自动代理可以不用为每一个目标对象那个手动定义代理对象,使用自动代理,您可以通过Bean的名称或者是Pointcut对比,自动为符合对比条件的目标对象建立代理对象。
1、BeanNameAutoProxyCreator
如果要提供的Advice的目标对象很多,这个时候,我们一个个的建立代理对象那个会是件很麻烦的事情,为此我们可以给目标对象取适当的bean的名称,例如某些服务对象取名为***Service,这样我们就可以使用org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator自动创建代理。
常见写法如下:
配置文件的定义:
[xhtml]
view plain
copy
<bean id="beforeAdvice" class="com.itcast.advice.LogBeforeAdvice"></bean>
<bean id="afterAdvice" class="com.itcast.advice.LogAfterAdvice"></bean>
<bean id="helloAdvise" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="mappedNames" >
<list>
<value>helloAaa</value>
<value>helloBbb</value>
</list>
</property>
<property name="advice" ref="beforeAdvice"></property>
</bean>
<bean id="beanNameAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>hello*</value>
</list>
</property>
<property name="interceptorNames" value="helloAdvise"></property>
</bean>
上边配置文件的意思就是凡是以hello开头的bean的方法被调用的时候都要经过helloAdvise这个advisor的处理。在helloAdvise中,对于helloAaa,helloBbb方法进行了beforeAdvice的拦截。
2、DefaultAdvisorAutoProxyCreator
Spring提供的自动代理建立者还有
org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator,只要我们在定义文件中加上DefaultAdvisorAutoProxyCreator的设置,在Bean的定义文件被读取完成之后,它会自动搜寻所有的advisor,并自动将Advisor应用至符合Pointcuts的目标对象身上。这种方式就带有随机性了。是否被advisor命中完全看advisor对bean的方法名称的匹配了。相当于我定义了一个全局的advisor。applicationContext.xml中声明的所有的bean中的方法被调用的时候,我都看一下advisor中对方法的匹配是否符合,如果符合就将advisor中的advice给应用上,拦截方法的处理。
实际编码的时候如下:
[xhtml]
view plain
copy
<bean id="autoProxy" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean>
相关文章推荐
- springframework(十)AOP之Pointcut、Advisor
- java【学习笔记(一)】初始类
- springframework(九)AOP的advices,中规中矩的使用方式
- java多线程回顾4:线程通信
- springframework(八)AOP的相关术语以及实现方式介绍
- springframe(七)AOP之动态代理
- springframework(六)AOP之静态代理
- springframework(五)资源国际化
- 012_Eclipse中使用 HDFS URL API 事例介绍
- JAVA.WEB笔记
- springframework(四)Bean的依赖设置与集合对象的处理
- springframework(三)Bean的基本管理
- JAVA工具集
- springframework(二)第一个spring程序
- Springframework(一)spring基础概念介绍
- JAVA中关闭OutputStream
- JAVA中修饰符类型的区别
- JAVA线程生命周期
- JAVA线程引起的CPU满负载
- eclipse中import中的引用都显示错…