从Spring配置从XML文件迁移到Annotation

时间:2013-10-21 23:13:50

标签: spring configuration annotations

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

这里key =“load *”使用通配符“*”。它匹配以load right开头的每个函数?我的问题是;如何使用基于注释的配置实现这一点而不将其放在每个函数上?

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

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

干杯

1 个答案:

答案 0 :(得分:1)

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

如果您仍想实现它,这里是一个小例子。请注意,我根本没有对此进行测试,只是一个想法演示。

@Aspect
public class MyInterceptor
{
   @Around("execution(* load*(..))")
   @Transactional
   public Object makeMeTransactional(ProceedingJoinPoint pjp)
   {
      return pjp.proceed();
   }
}