Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在子接口中重写的事务性带注释的方法仍然会启动事务吗_Java_Spring_Transactions - Fatal编程技术网

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

考虑使用Spring的Java应用程序的以下场景:

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代理也不行