论坛首页 入门技术论坛

spring aop学习笔记

浏览 1359 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-17   最后修改:2009-02-17
具体的总结在下面的地址已经很清楚了
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切面中,从而可以实现更复杂的切 面。               
    
疑点1:spring aop不知道可不可以将bean注入到切面中?测试了下貌似不行。
疑点2:按照http://lighter.iteye.com/blog/42673作者的例子,发现使用ProxyFactoryBean代理时,其中属性interceptorName可以是切面也可以是通知?
疑点3:使用纯粹的pojo切面时,如果我在 <aop:before..>执行函数体时需要判断其返回值怎么办?比如当执行函数返回true时程序继续运行,返回false时中断。就像是在发贴之前先判断是否登录一样,登录则继续运行,否则跳转到登录页或给出提示。。
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics