<prop key="load*">PROPAGATION_REQUIRED, readOnly</prop>
这里key =“load *”使用通配符“*”。它匹配以load right开头的每个函数?我的问题是;如何使用基于注释的配置实现这一点而不将其放在每个函数上?
@Transactional(readOnly = true, propagation= Propagation.REQUIRED)
无论如何我可以做到这一点,而不是把它放在名字以“加载”开头的每个函数之上吗?
干杯
答案 0 :(得分:1)
您可以使用aspects来实现此目的。即定义一个截取所有名为“load *”的方法的方面,并确保启动事务。但是在我看来,这种方法很糟糕,因为它使您的代码难以进行单元测试,理解和维护。实际上@Transactional处理是使用方面完成的,那么为什么还要为此添加另一层抽象呢?有了这个注释,有人会查看你的代码并立即知道该方法是/应该在事务中运行。隐藏这个会让别人的生活更加艰难。
如果您仍想实现它,这里是一个小例子。请注意,我根本没有对此进行测试,只是一个想法演示。
@Aspect
public class MyInterceptor
{
@Around("execution(* load*(..))")
@Transactional
public Object makeMeTransactional(ProceedingJoinPoint pjp)
{
return pjp.proceed();
}
}