返回首頁
當前位置: 主頁 > 網絡編程 > Jsp實例教程 >

spring的AOP的配置方式

時間:2011-12-11 01:20來源:知行網www.aotfjk.live 編輯:麥田守望者

1. Proxy代理
其中類MyThrowsAdvice實現了接口中的public void afterThrows( [Method method,] [Object args,] [Object target,] Throwable throwable );方法
<bean id=”bizOneTarget” class=”com.company.biz.impl.BizProcessImpl”/>
<bean id=”throwsAdvice” class=”com.company.advice.MyThrowsAdvice”/>
<bean id=”bizOne” class=”org.springframework.aop.framework.ProxyFactoryBean”>
<property name=”target”><ref bean=”bizOneTargte”/></property>
<property name=”proxyInterfaces”>
<value>com.company.biz.IBizProcessImpl</value>
</property>
<property name=”interceptorNames”>
<list>
<value>throwsAdvice</value>
</list>
</property>
</bean>

在上面的基礎上還可以增加匹配方式
<bean id=" throwsAdviser"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref local=" throwsAdvice"/>
</property>
<property name="pattern">
<value>.*</value>
</property>
</bean>
2. 簡化配置
如果有多個BizProcess的對象需要代理,我們在Spring配置中為每一個Bean都配置一個代理,那么配置文件的維護就成了麻煩。為此,Spring提供了比較方便的方法解決這個問題,比如BeanNameAutoProxyCreator、DefaultAdviceAutoProxyCreator和metadata autoproxying。我們采用了BeanNameAutoProxyCreator,因為他比較直觀和簡單
配置如下:
<bean id=”beanNameAutoProxyCreator” class=”org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”>
<property name=’beanNames”>
<list>
<value>*Service</value>
</list>
</property>
<property name=”interceptorNames”>
<value>throwsAdvice</value>
</property>
</bean>
另外的一種簡化配置使用 DefaultAdvisorAutoProxyCreator 自動代理生成器.
3. spring2的良好配置方式
以下的配置方式允許對同一個類實行多次代理,推薦使用.
第一種方式, methodSecurityInterceptor類實現了AOP聯盟的規范接口,是一種環繞通知.
<aop:config>
<aop:pointcut id="idempotentOperation1"
expression="execution(* test.com.wenc.spring2.acegi.T*.*(..))" />

<aop:advisor pointcut-ref="idempotentOperation1"
advice-ref="methodSecurityInterceptor" />
</aop:config>

<bean id="methodSecurityInterceptor"
class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor">

第二種方式acegiMethod類按照spring的環繞方式實現,不需要指定接口,只要在指定方法的第一個參數為ProceedingJoinPoint.
<aop:config>
<aop:aspect id="acegiMethodTest2" ref="acegiMethod">

<aop:pointcut id="idempotentOperation2"
expression="execution(* test.com.wenc.spring2.acegi.T*.*(..))" />

<aop:before pointcut-ref="idempotentOperation2"
method="printLog" />

</aop:aspect>

</aop:config>

<bean id="acegiMethod"
class="test.com.wenc.spring2.acegi.AcegiMethod">
</bean>

------分隔線----------------------------
標簽(Tag):Struts2 Struts2教程 Struts2基礎教程 Struts2技巧 Struts2源代碼
------分隔線----------------------------
推薦內容
猜你感興趣
湖南刘雪龙黑彩