Java 在子接口中重写的事务性带注释的方法仍然会启动事务吗
考虑使用Spring的Java应用程序的以下场景:Java 在子接口中重写的事务性带注释的方法仍然会启动事务吗,java,spring,transactions,Java,Spring,Transactions,考虑使用Spring的Java应用程序的以下场景: public interface FooDao { @Transactional void save(Foo foo); } public interface SecureFooDao extends FooDao { @Secured({Role.ADMIN}) void save(Foo foo); } 我的问题是,;在SecureFooDao接口上调用save会启动事务,还是会忽略重写的方法注释?来自S
public interface FooDao {
@Transactional
void save(Foo foo);
}
public interface SecureFooDao extends FooDao {
@Secured({Role.ADMIN})
void save(Foo foo);
}
我的问题是,;在SecureFooDao接口上调用save会启动事务,还是会忽略重写的方法注释?来自Spring引用
小费
Spring建议您仅使用@Transactional注释注释具体类(以及具体类的方法),而不是注释接口。当然,您可以将@Transactional注释放置在接口(或接口方法)上,但只有在使用基于接口的代理时,它才能起到预期的作用。Java注释不是从接口继承的这一事实意味着,如果您使用的是基于类的代理(proxy target class=“true”)或基于编织的方面(mode=“aspectj”),则代理和编织基础结构无法识别事务设置,并且对象不会包装在事务代理中,这绝对是不好的
因此,即使不重写,它也只能在使用SpringAOP代理(我不推荐这样做)的情况下工作,而不能用于AspectJ或CGILib代理
但我不认为这对在接口中被重写的方法有效,即使对SpringAOP代理也不行