将Spring AOP应用一例改为对Acton的代理
2006-03-29 17:22
381 查看
本例是以用户登陆为例,有一个VO、一个Manager、一个DAO、一个Action和一个Form等,像DAO、Manager、VO这些我不想多说,并登陆的业务逻辑也不想多说,我只说我的ApplicationContext.xml和struts-config.xml是如何设置的,下面是ApplicationContext.xml(也就是上例里面的bean.xml,项目中多用的是ApplicationContext.xml)的配置:
在原文中的:
是定义了这个虚拟的bean,然后在测试类SpringTestCase2中用ApplicationContext.getBean("myCheckClass");来获得这个bean,然后调用execute方法(这里我把上例中的excute方法改成了execute,因为Action中自动执行的是execute,这样我可以直接用那个myPointcutAdvisor2正则匹配的拦截器应用到Action上,记得把ExcuteClass里的相应方法名也随之修改,SpringTestCase2测试类中的相应调用也改)。
MyAutoProxy这个bean是对login这个Action的自动代理,他是自动运行的,beanNames指定是哪个Action(也可以是普通java类),如果要指定多个Action(或java类),则
这样配置。interceptorNames配置的是拦截器的beanid,同样如果想配多个拦截器,也可以写多个value。
在ApplicationContext.xml中还需要把Action做为bean来配,上面代码中的/login就是在xml中配置的bean,其余的如manager和dao也需要配置:
本例是用Hibernate来做持久化层的,这里的txProxyTemplate是事务处理的bean,userDAO也是要配的,其它的代码如下:
这里的事务处理的意思是,如果以add、delete、update、query、reduce和set开头的函数都要进行事务处理。
在struts-config.xml还得配置Action:
其它的都没怎么改,就这样,在页面上登陆,看后台就能看出来已经先走的拦截器。
<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> |
MyAutoProxy这个bean是对login这个Action的自动代理,他是自动运行的,beanNames指定是哪个Action(也可以是普通java类),如果要指定多个Action(或java类),则
<property name="beanNames"> <list> <value>/login</value> <value>/xxx</value> <list> </property> |
在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> |
<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> |
在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> |
相关文章推荐
- WEB开发中Spring AOP实际应用一例
- spring AOP中自身方法调用无法应用代理解决办法
- Spring Aop应用一例
- WEB开发中Spring AOP实际应用一例
- WEB开发中Spring AOP实际应用一例
- Spring AOP实际应用一例
- Spring AOP实际应用一例
- Spring AOP 学习(一) 代理模式
- JavaEE---------简单使用JDK动态代理模拟Spring的AOP
- 最简单的动态代理实例(spring基于接口代理的AOP原理)
- 最简单的动态代理实例(spring基于接口代理的AOP原理)
- 应用AOP简化WinForm的异步操作——Spring.NET实现
- Spring 3.x 企业应用实战—— AOP基础
- Spring AOP的理解和应用场景
- Spring AOP动态代理原理与实现方式
- 在Spring AOP代理过的对象上支持dubbo annotation配置事物失效问题
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
- spring中面向切面编程AOP的简单应用
- AOP及其在Spring中的应用(一)
- spring aop学习8:spring对jdk和cglib动态代理的选择