您的位置:首页 > 编程语言 > Java开发

另一种方式使用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的拦截器友
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: