问题描述
现在打算改用spring3,在设置aop管理事务时,碰到表达式语法的问题,我的类目录结构基本如下com.taoists.base.user.service.impl.UserMgrImpl.javacom.taoists.sale.order.service.impl.OrderMgrImpl.java表达式是这样写:expression="execution(* com.taoists.*.service..*(..))"或者这样写: expression="execution(* com.taoists.*.service.impl.*.*(..))"另外,com.taoists.core包下还有很多工具类,如文件上传,邮件发送等,com.taoists.core.utile.mail.SendMail.javacom.taoists.core.utils.upload.FileUpload.java这些工具类是否需要加入aop拦截中?谢谢
解决方案
你这里需要通配两级目录,需要这样写:expression="execution(* com.taoists.*.*.service..*(..))" 工具类不需要加入,如果service中有工具类调用,那已经处在事物之中了,所以不需要。
解决方案二:
这个样写expression="execution(* com.taoists.*.service.impl.*.*(..))" 例如我之前写的<!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean><!-- 配置事务的传播特性 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="add*" propagation="REQUIRED"/><tx:method name="del*" propagation="REQUIRED"/><tx:method name="modify*" propagation="REQUIRED"/><tx:method name="*" read-only="true"/><!--read-only="true 脏数据只读,提高效率 --></tx:attributes></tx:advice><!-- 那些类的哪些方法参与事务 --><aop:config> <!--如果这里配置错了可能进行回滚,所以能看到sql语句,但是数据库是没数据的 --><aop:pointcut id="allManagerMethod" expression="execution(* com.zxt.usermsg.manager.*.*(..))"/><aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/></aop:config></beans>
解决方案三:
expression="execution(* com.taoists.*.service.impl.*.*(..))"这样写工具类不需要