技术帮
 

如何将事务配置在Action层

本网站内容基本都是原创作品,未得到作者同意也欢迎转载
转载请注明出处:技术帮
说你呢,赶紧长按二维码,然后点击识别图中二维码

任何技术难题可进QQ群提问:【小崔说编程
对于提问的原则是:没有你不能问的,只有我不会答的

1472955908895017376.png说两句


Spring整合Struts后,网上大量的技术人员都推荐将事务配置在Service层,譬如下面的配置项:

       <aop:config proxy-target-class="true">

<!-- 在哪些方法上做切面 -->

<aop:pointcut id="txpointcut"  expression="execution(* com.wskj.app.service..*.*(..))" />

<aop:advisor advice-ref="txAdvice" pointcut-ref="txpointcut" />

</aop:config>


从上面的配置可以看到事务被配置在Service层。


不过个人不敢苟同,我始终认为事务应该配置在Action层,配置如下:

     <aop:config proxy-target-class="true">

<!-- 在哪些方法上做切面 -->

<aop:pointcut id="txpointcut"  expression="execution(* com.wskj.app.action..*.*(..))" />

<aop:advisor advice-ref="txAdvice" pointcut-ref="txpointcut" />

</aop:config>


但是,配置后发现存在问题,一旦这样配置后,Action层的类无法注入任何对象。


@Controller

public class DvdAction {

private String target;

private List lst;

@Autowired

private DvdService dvdService;


}


如面的代码,dvdService注入不进来了,总是null。


如何解决这个问题呢?

查了好多资料,最后终于发现在struts.xml中配置一个常量如下即可:

<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true"/>


不过需要注意的是,Struts2的版本一定要新,太旧的jar是不支持的。