另一种方式使用SPRING的AOP
2009-11-29 13:58
316 查看
这次使用org.springframework.aop.framework.ProxyFactoryBean,进行AOP,测试权限控制,
第一次:在XML里配置如下,去掉注解方式
[code]
<bean id="logAop" class="bbs.domain.interceptor.LogAop" />
<bean id="boardAction" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="target">
<bean class="bbs.web.action.BoardAction" />
</property>
<property name="interceptorNames">
<list>
<value>logAop</value>
</list>
</property>
</bean>
[code]
这个配置三个property分别是,明确使用cglib代理,目标对象是BoardAction 织入logAop,LogAop实现了MethodInterceptor接口,这个接口用来做around advice . 配置好后,测试,和昨天的是一样的结果,无法转入board.实际上,在Spring内部最终的实现都是一样的,无论是使用这种配置ProxyFactoryBean的方式,还是配置<aop/>,或是用注解.
通过这种方式,我们看到,在struts.xml中配置的<action name="board_*" class="boardAction" method="{1}">,boardAction是在Spring中使用org.springframework.aop.framework.ProxyFactoryBean创建的,struts2应当是把web中的form的值传给了ProxyFactoryBean,而没有传给BoardAction.这应该就是出错的原因.
第二次:也使用同样的方式,但是,是对service进行拦截.BoardAction中注入的是由代理工厂产生的代理对象.
<bean id="logAop" class="bbs.domain.interceptor.LogAop" />
<bean id="aopTest" class="org.springframework.aop.framework.ProxyFactoryBean"><!--
<property name="proxyTargetClass">
<value>true</value>
</property>
--><property name="target">
<bean class="bbs.domain.service.impl.BoardServiceBean" />
</property>
<property name="interceptorNames">
<list>
<value>logAop</value>
</list>
</property>
</bean>
<bean id="boardAction" class="bbs.web.action.BoardAction">
<property name="boardService" ref="aopTest" />
</bean>
这个当然能够实现预期的目的,登录后可以添加版块,没登录就不可能添加,但是BoardSevice中的save()方法是没有返回值的,因此无法在程序中判断是否成功添加版块,只能返回success.
当然可以为SAVE 添加String类型的返回值,但这样得不偿失,还是用Stuts2的拦截器友
第一次:在XML里配置如下,去掉注解方式
[code]
<bean id="logAop" class="bbs.domain.interceptor.LogAop" />
<bean id="boardAction" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="target">
<bean class="bbs.web.action.BoardAction" />
</property>
<property name="interceptorNames">
<list>
<value>logAop</value>
</list>
</property>
</bean>
[code]
这个配置三个property分别是,明确使用cglib代理,目标对象是BoardAction 织入logAop,LogAop实现了MethodInterceptor接口,这个接口用来做around advice . 配置好后,测试,和昨天的是一样的结果,无法转入board.实际上,在Spring内部最终的实现都是一样的,无论是使用这种配置ProxyFactoryBean的方式,还是配置<aop/>,或是用注解.
通过这种方式,我们看到,在struts.xml中配置的<action name="board_*" class="boardAction" method="{1}">,boardAction是在Spring中使用org.springframework.aop.framework.ProxyFactoryBean创建的,struts2应当是把web中的form的值传给了ProxyFactoryBean,而没有传给BoardAction.这应该就是出错的原因.
第二次:也使用同样的方式,但是,是对service进行拦截.BoardAction中注入的是由代理工厂产生的代理对象.
<bean id="logAop" class="bbs.domain.interceptor.LogAop" />
<bean id="aopTest" class="org.springframework.aop.framework.ProxyFactoryBean"><!--
<property name="proxyTargetClass">
<value>true</value>
</property>
--><property name="target">
<bean class="bbs.domain.service.impl.BoardServiceBean" />
</property>
<property name="interceptorNames">
<list>
<value>logAop</value>
</list>
</property>
</bean>
<bean id="boardAction" class="bbs.web.action.BoardAction">
<property name="boardService" ref="aopTest" />
</bean>
这个当然能够实现预期的目的,登录后可以添加版块,没登录就不可能添加,但是BoardSevice中的save()方法是没有返回值的,因此无法在程序中判断是否成功添加版块,只能返回success.
当然可以为SAVE 添加String类型的返回值,但这样得不偿失,还是用Stuts2的拦截器友
相关文章推荐
- ITCAST视频-Spring学习笔记(使用Spring的注解方式实现AOP的细节)
- Spring系列之 (九):AOP实现方式(一):使用AspectJ的xml方式
- 使用Spring的注解方式实现AOP
- 使用Spring的注解方式实现AOP
- 使用Spring的注解方式实现AOP
- 使用Spring的注解方式实现AOP
- Spring使用AspectJ进行AOP的开发:注解方式
- Spring aop--几种不同的使用方式
- Spring aop--几种不同的使用方式
- (9) 使用Spring的注解方式实现AOP入门 以及 细节
- Spring中AOP使用——注解方式
- Spring以注解方式使用aop
- 使用Spring的注解方式实现AOP
- 使用Spring的注解方式实现AOP
- spring学习笔记8--使用spring进行面向切面的(AOP)编程(2)XML配置方式
- Spring实现AOP方式之二:使用注解配置 Spring AOP
- 纯java 使用spring的注解方式AOP
- 使用Spring的注解方式实现AOP
- Spring aop--4不同的使用方式
- Spring (五) AOP第二章使用方式