[英]Spring autowired null fields between Tomcat server and Tomcat launched programmatically
我可以通过在类中使用这些字段的公共 getter 来绕过这个问题,但我想知道为什么。
this.persist.doSomeProcess(); // NullPointerException
但:
this.getPersist().doSomeProcess(); // with public MyField getPersist() it works fine
问题是,当我通过 IntelliJ 在普通 Tomcat 上运行我的项目时,一切正常,我不需要公共 getter。
IntelliJ 的版本并不重要,因为自 8 个月前的版本以来就是这种情况。
这是我拥有的两个不同的调用堆栈(左一个适用于真正的 tomcat),右升一个 NPE:
我遇到了这个问题,因为我在 TransactionTemplate 中放置了 @Transactional 注释而不是编程调用。
我真的对这件事很好奇。
我找到了问题的根源。 在非公共方法中执行期间,这些字段为空。 一旦它们被设置为 public,Spring 就可以正确连接它的 Proxy。 在 TomcatRunner 中。
我不知道为什么使用包私有方法执行它可以在 IDE 中启动的真正 Tomcat 上工作。
但是对于 TomcatRunner,我们需要将使用字段的方法设置为 public 以使其工作。
如果方法是最终的,我们也会遇到同样的问题。 但在这种情况下,无论是在真正的 Tomcat 还是 TomcatRunner 上。
干杯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.