[英]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.