將Spring AOP應用一例改為對Acton的代理

來源:互聯網
上載者:User

本例是以使用者登陸為例,有一個VO、一個Manager、一個DAO、一個Action和一個Form等,像DAO、Manager、VO這些我不想多說,並登陸的商務邏輯也不想多說,我只說我的ApplicationContext.xml和struts-config.xml是如何設定的,下面是ApplicationContext.xml(也就是上例裡面的bean.xml,項目中多用的是ApplicationContext.xml)的配置:

<bean name="MyAutoProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames">
<value>/login</value>
</property>
<property name="interceptorNames">
<list>
<value>myPointcutAdvisor2</value>
</list>
</property>
</bean>

在原文中的:

<bean id="myCheckClass" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.testspring.demo.CheckInterface</value>
</property>
<property name="target">
<ref local="checkInterface" />
</property>
<property name="interceptorNames">
<value>myPointcutAdvisor2</value>
</property>
</bean>

是定義了這個虛擬bean,然後在測試類別SpringTestCase2中用ApplicationContext.getBean("myCheckClass");來獲得這個bean,然後調用execute方法(這裡我把上例中的excute方法改成了execute,因為Action中自動執行的是execute,這樣我可以直接用那個myPointcutAdvisor2正則匹配的攔截器應用到Action上,記得把ExcuteClass裡的相應方法名也隨之修改,SpringTestCase2測試類別中的相應調用也改)。
    MyAutoProxy這個bean是對login這個Action的自動代理,他是自動啟動並執行,beanNames指定是哪個Action(也可以是普通java類),如果要指定多個Action(或java類),則

<property name="beanNames">
<list>
<value>/login</value>
<value>/xxx</value>
<list>
</property>

這樣配置。interceptorNames配置的是攔截器的beanid,同樣如果想配多個攔截器,也可以寫多個value。
    在ApplicationContext.xml中還需要把Action做為bean來配,上面代碼中的/login就是在xml中配置的bean,其餘的如manager和dao也需要配置:

<bean name="/login" class="com.testspring.action.LoginAction">
<property name="userManager">
<ref bean="userManager" />
</property>
</bean>

<bean id="userManager" parent="txProxyTemplate">
<property name="target">
<bean
class="com.testspring.manager.impl.UserManagerImpl">
<property name="userDAO">
<ref bean="userDAO" />
</property>
</bean>
</property>
</bean>

本例是用Hibernate來做持久化層的,這裡的txProxyTemplate是交易處理的bean,userDAO也是要配的,其它的代碼如下: 

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/com/testspring/dao/model</value>
</list>
</property>
</bean> 

<bean id="transactionManager" 
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>

<bean id="dao" 
  class="com.testspring.dao.hibernate.BaseDaoHibernate">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean> 

<bean id="userDAO" 
  class="com.testspring.dao.hibernate.UserDAOHibernate">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean> 

<bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="query*">PROPAGATION_REQUIRED</prop>
<prop key="reduce*">PROPAGATION_REQUIRED</prop>
<prop key="set*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

這裡的交易處理的意思是,如果以add、delete、update、query、reduce和set開頭的函數都要進行交易處理。
    在struts-config.xml還得配置Action:

 

<action path="/login" type="org.springframework.web.struts.DelegatingActionProxy" input="index.jsp" validate="true" name="loginForm">
<forward name="success" path="/WEB-INF/pages/success.jsp" />
<forward name="failure" path="/WEB-INF/pages/failed.jsp" />
</action>

其它的都沒怎麼改,就這樣,在頁面上登陸,看後台就能看出來已經先走的攔截器。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.