另一种方式使用SPRING的AOP

本文介绍了使用Spring AOP框架中的ProxyFactoryBean进行权限控制的方法。文章详细探讨了两种配置方式:一种是直接对Action进行代理,另一种是针对Service层进行拦截,并分析了各自的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 这次使用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的拦截器友

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值