【发布时间】:2018-08-10 21:38:41
【问题描述】:
如果我将@Validated 注释添加到我的服务的接口/实现,则该服务不再是事务性的。 Stacktrace 显示没有TransactionInterceptor,但我只看到MethodValidationInterceptor。如果我删除@Validated,那么我会看到TransactionInterceptor 和MethodValidationInterceptor 当然会消失。这些方面是否相互排斥?
@Service
//@Validated <- here is my problem :)
public interface AdminService {
String test(String key, String result);
}
public class AdminServiceImpl implements AdminService, BeanNameAware, ApplicationContextAware {
@Override
@Transactional(transactionManager = "transactionManager")
public String test(String key, String result) {
return "hehe";
}
}
@Configuration
@EnableAspectJAutoProxy(exposeProxy = true)
@EnableTransactionManagement(order = AspectPrecedence.TRANSACTION_MANAGEMENT_ORDER)
public class AppConfiguration {..}
【问题讨论】:
-
您要在服务层验证什么?在您的服务开始处理实体时,您在该级别收到的实体应该已经经过验证。
-
你可能是对的,但这不是我问题的答案:(
-
如果答案是“把你的验证放在那个级别没有意义,把它上移”,然后你就可以恢复你的交易......
-
我刚刚检查了另一件事 @Validated 也关闭了其他方面为我的服务提供建议,因此可以肯定这种行为有问题:(
-
来自文档;然而,类级别的注释对于触发特定 bean 的方法验证是必要的。也可以用作自定义原型注释或自定义组特定验证注释的元注释。
标签: spring validation transactions aop spring-aspects