问题描述
这是业务公用的com.dream.business.proxy.services这是保存的核心包com.dream.framework.core所有的保存都要调用此包的方法我现在想用AOP切入service让在service实现类里面里面是一个事物,怎么控制,如果只控制com.dream.framework.core就没意义了,我要用一种想法就是@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public@interfaceProxyAopService在service实现类中加入上面的注解就受事物控制,怎么配置呢而且事物要包括om.dream.framework.core不知是下属的子类或者包
解决方案
解决方案二:
搞不懂你为什么要自己一个事务注解,Spring自身就已经实现了事务控制的注解Transcation,只需要在配置文件中配置事务为注解即可,是需要使用事务控制的方法上加上该注解即可。如果要自己实现,思路如下:1、定义注解2、编写自定义注解切面,织入注解@Component@AspectJpublicclassAop{@Around(织入切面的条件)publicObjectcut(){}}如果想要现成的例子,请上Spring官网查阅文档
解决方案三:
引用1楼crazypandariy的回复:
搞不懂你为什么要自己一个事务注解,Spring自身就已经实现了事务控制的注解Transcation,只需要在配置文件中配置事务为注解即可,是需要使用事务控制的方法上加上该注解即可。如果要自己实现,思路如下:1、定义注解2、编写自定义注解切面,织入注解@Component@AspectJpublicclassAop{@Around(织入切面的条件)publicObjectcut(){}}如果想要现成的例子,请上Spring官网查阅文档
谢谢,重造轮子了呵呵,我走入歧途了了后来还是使用AOP切入业务逻辑层的<!--事务的传播特性--><tx:adviceid="txadvice"transaction-manager="transactionManager"><tx:attributes><tx:methodname="add*"propagation="REQUIRED"/><tx:methodname="delete*"propagation="REQUIRED"/><tx:methodname="save*"propagation="REQUIRED"rollback-for="Exception"/><tx:methodname="modify*"propagation="REQUIRED"/><tx:methodname="update"propagation="REQUIRED"/><!--hibernate4必须配置为开启事务否则getCurrentSession()获取不到--><tx:methodname="*"propagation="REQUIRED"read-only="true"/></tx:attributes></tx:advice><!--那些类那些方法使用事务--><aop:config><!--只对业务逻辑层实施事务接口的任意方法的执行--><aop:pointcutid="allManagerMethod"expression="(execution(*com.dream.business.web..services..*.*(..)))"/><aop:advisorpointcut-ref="allManagerMethod"advice-ref="txadvice"/><!--只对业务逻辑层实施事务标注的所有类的任意方法.--></aop:config>
为后人解答,web包下的所有包里面的services为事物的切入点,记得一定是定义的save*方法其他的方法肯定不受事物控制的,
解决方案四:
个人觉得还是使用注解更方便灵活:<!--配置事务管理器--><beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"></property></bean><tx:annotation-driventransaction-manager="transactionManager"/>
基于注解的事务只需要在配置文件中加入以上配置即可实现。在需要开启事务的方法上加上注解@Transcation