接口上的注释是否会在实现中持续存在?

时间:2017-01-26 21:25:29

标签: java spring

我有这种技术疑问......

如果我有一个界面

public interface test{
    @Transactional
    public void mymethod();
    }

然后我有我的实现

public class testImpl implements test{
@Override
    public void mymethod(){
        //..do something
    }
}

由于我正在使用@Override,我的注释@Transactional,@ Lock还是其他任何持久的我的实现?或者将通过接口方法覆盖而不添加注释中的任何特殊行为?

1 个答案:

答案 0 :(得分:0)

我读过这个问题的最佳答案:

请参阅此链接https://stackoverflow.com/a/5551597/3447634

回复的副本: "在我看来,这完全取决于您的应用程序架构。这取决于你如何代理你的课程。如果您的应用设置为" proxy-target-class =' true'" (在您的应用程序上下文中,如果您注释接口,则不会获取@Transactional信息。

查看Spring文档 - "提示"了解更多信息。

Spring建议您只使用@Transactional注释来注释具体类(以及具体类的方法),而不是注释接口。您当然可以将@Transactional注释放在接口(或接口方法)上,但这只能在您使用基于接口的代理时按预期工作。 Java注释不是从接口继承的事实意味着如果您使用基于类的代理(proxy-target-class =" true")或基于编织的方面(mode =" aspectj& #34;),然后代理和编织基础设施无法识别事务设置,并且对象不会被包装在事务代理中,这将是非常糟糕的。"