SPring+Structs2實現的項目中進行Spring AOP時的相關小記



SPring+Structs2實現的項目中進行Spring AOP時的相關小記

1.一般爲了方便開發Structs2的項目中的action都會建立一個BaseAction如果繼承了BaseAction中的子類進行AOP時,只能指定AOP中的PointCut爲BaseAction
如果對應的BaseAction如果繼承於ActionSupport的話,就只能定義AOP中的PointCut爲ActionSupport了
因爲Spring生成的代理類中,對同名的方法,只有一個,即子類重寫父類的方法,只有一個,所以如果找不到代理類直接實現的接口,就會找它的最頂級超類中去找。

2. 如果是用註解方式,原理同樣,因爲不好更改ActionSupport中對應的類增加對應的註解,所以只好不能繼承ActionSupport了.

3. 對於非單例模式(none singleton)的類進行AOP時,需要開啓proxy-target-class=”true”,使用Cglib進行aop代理處理,
 如果是業務類,一般都是接口,可以不加,對於action類中,要加上
 如下所示爲用於註解方式的
  <aop:aspectj-autoproxy  proxy-target-class="true" />
  如下所示爲用於xml配置方式的
  <aop:config proxy-target-class="true">
  對於採用aop攔截器方式的增加一個元素
 <bean name="xxaspet"  class="com.xx.aop.LogAspect"/>
 <bean name="loggingAutoProxy"
 class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">      
 <property name="proxyTargetClass" value="true"/>
 <property name="beanNames"><value>.*</value></property>
 <property name="interceptorNames">
  <list>
   <value>xxaspet</value>
  </list>
 </property>
 </bean>

4. 對於Structs中,一般需要增加<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />,
 以便Structs2中優先使用Spring的裝配類,就是Spring來負責類的加載,初始化。


5.相關PointCut說明: execution 用於匹配方法執行的連接點;
within 用於匹配指定類型內的方法執行;
this 用於匹配當前AOP代理對象類型的執行方法;注意是AOP代理對象的類型匹配,這樣就可能包括引入接口也進行類型匹配;
target用於匹配當前目標對象類型的執行方法;注意是目標對象的類型匹配,這樣就不包括引入接口也進行類型匹配;
args用於匹配當前執行的方法傳入的參數爲指定類型的執行方法;
@within 用於匹配所以持有指定註解類型內的方法;
@target 用於匹配當前目標對象類型的執行方法,其中目標對象持有指定的註解;
@args 用於匹配當前執行的方法傳入的參數持有指定 註解的執行;
@annotation 用於匹配當前執行方法持有指定註解的方法;
bean: Spring AOP擴展的,AspectJ沒有對於指示符,用於匹配特定名稱的Bean對象的執行方法;
reference pointcut :表示引用其他命名切入點,只有@ApectJ風格支持,Schema風格不支持。

一般指PointCut可以用within指定對應包及子包的類中所有的公共方法
可以用execution指定對應包及子包的類中對應的公共方法
可以用@annotation指定對應包及子包的類中對應的具有對應註解的方法

相關地方可能存在理解錯誤,希望看到的朋友進行指正
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章