2
<prop key="load*">PROPAGATION_REQUIRED, readOnly</prop>

这里 key="load*" 使用通配符 "*"。它匹配每个以 load 开头的函数,对吗?我的问题是;我将如何使用基于注释的配置来实现它而不将它放在每个函数上?

@Transactional(readOnly = true, propagation= Propagation.REQUIRED)

无论如何我可以做到这一点而不把它放在它的名字以“加载”开头的每个函数之上?

干杯

4

1 回答 1

1

您可以为此目的使用方面。即定义一个切入名为“load*”的所有方法并确保事务启动的方面。但是在我看来,这种方法是一种糟糕的方法,因为它使您的代码难以进行单元测试、理解和进一步维护。事实上@Transactional 处理是使用方面完成的,那么为什么还要为此添加另一层抽象呢?使用此注释,某人将查看您的代码并立即知道该方法正在/应该在事务中运行。隐藏这一点会使其他人的生活更加艰难。

如果你仍然想实现它,这里是一个小例子。注意,我根本没有测试这个,只是一个想法演示。

@Aspect
public class MyInterceptor
{
   @Around("execution(* load*(..))")
   @Transactional
   public Object makeMeTransactional(ProceedingJoinPoint pjp)
   {
      return pjp.proceed();
   }
}
于 2013-10-22T09:34:59.417 回答