具体的总结在下面的地址已经很清楚了
http://jamesby.iteye.com/blog/39899
感觉记清楚创建spring aop的流程比较重要 :
1.创建切面。
切面=通知+切点
2.切面在spring中是以代理方式实现的,所以还需要代理。
最原始的是proxyFactoryBean
一般都是用自动代理,而自动代理又有三种
第一种:基于spring上下文的(xml文件),DefaultAdvisorAutoProxyCreator。只要在xml中申明此bean,但无beanid。这样就可以直接使用切面了。例如:
首先声明一个切面:
然后申明一个代理:
使用目标bean:
第二种:基于@AspectJ注解驱动切面的自动代理,直接在通知中注解切面
操作如下:
1.声明注解后的切面a1为一个bean
2.声明一个自动代理bean,将注解的bean转换为代理通知。spring提供了一个名为AnnotationAwareAspectJAutoProxyCreator自动代理器,可以使用声明bean的形式,也可以用配置元素
第三种:纯粹的pojo切面,在xml中定义切面。这个比较简单就不说了
3.AspectJ aop解决方案
1.实现多类型切点.spring aop中能是方法切点。
2.aspectj可以将某个bean注入到aspectj切面中,从而可以实现更复杂的切 面。
[color=red]疑点1:spring aop不知道可不可以将bean注入到切面中?测试了下貌似不行。[/color]
[color=red]疑点2:按照http://lighter.iteye.com/blog/42673作者的例子,发现使用ProxyFactoryBean代理时,其中属性interceptorName可以是切面也可以是通知?[/color]
[color=red]疑点3:使用纯粹的pojo切面时,如果我在 <aop:before..>执行函数体时需要判断其返回值怎么办?比如当执行函数返回true时程序继续运行,返回false时中断。就像是在发贴之前先判断是否登录一样,登录则继续运行,否则跳转到登录页或给出提示。。[/color]
http://jamesby.iteye.com/blog/39899
感觉记清楚创建spring aop的流程比较重要 :
1.创建切面。
切面=通知+切点
2.切面在spring中是以代理方式实现的,所以还需要代理。
最原始的是proxyFactoryBean
一般都是用自动代理,而自动代理又有三种
第一种:基于spring上下文的(xml文件),DefaultAdvisorAutoProxyCreator。只要在xml中申明此bean,但无beanid。这样就可以直接使用切面了。例如:
首先声明一个切面:
<bean id="audienceAdvisor"..><property name="advice">.<property name="expression">.</bean>
然后申明一个代理:
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
使用目标bean:
<bean id="表演家1" class=".." autowire="constructor"><constructor-arg ref=""></bean>
第二种:基于@AspectJ注解驱动切面的自动代理,直接在通知中注解切面
操作如下:
1.声明注解后的切面a1为一个bean
<bean id="a1" class...>
2.声明一个自动代理bean,将注解的bean转换为代理通知。spring提供了一个名为AnnotationAwareAspectJAutoProxyCreator自动代理器,可以使用声明bean的形式,也可以用配置元素
<aop:aspectj-autoproxy/>
第三种:纯粹的pojo切面,在xml中定义切面。这个比较简单就不说了
3.AspectJ aop解决方案
1.实现多类型切点.spring aop中能是方法切点。
2.aspectj可以将某个bean注入到aspectj切面中,从而可以实现更复杂的切 面。
[color=red]疑点1:spring aop不知道可不可以将bean注入到切面中?测试了下貌似不行。[/color]
[color=red]疑点2:按照http://lighter.iteye.com/blog/42673作者的例子,发现使用ProxyFactoryBean代理时,其中属性interceptorName可以是切面也可以是通知?[/color]
[color=red]疑点3:使用纯粹的pojo切面时,如果我在 <aop:before..>执行函数体时需要判断其返回值怎么办?比如当执行函数返回true时程序继续运行,返回false时中断。就像是在发贴之前先判断是否登录一样,登录则继续运行,否则跳转到登录页或给出提示。。[/color]