2013-04-14 199 views
0

最近,我遇到了一個情況,基於彈簧的應用程序在訪問類(A)中的自動裝配字段時拋出「NullPointerApplication」。自動裝配的bean也用於其他類(B和C)。這些類(B和C)在訪問該bean時正常工作。彈簧自動裝配失敗,但應用程序啓動

applicaton-context.xml: 

<bean id="myBean" class="x.y.x.MyBean"> 
</bean> 

<context:component-scan base-package="x.y.z" /> 


Class MyBean{ 
public void m(){ 
} 
} 

@Component  
Class A{ 

@Autowired 
MyBean theBean; 

public void methodA(){ 
    theBean.m();      //Getting NPE 
} 

} 

@Component 
Class B{ 

@Autowired 
MyBean theBean; 

public void methodB(){ 
    theBean.m();        // No NPEs, works fine 
} 

} 

@Component 
Class C{ 

@Autowired 
MyBean theBean; 

public void methodC(){ 
    theBean.m();        // No NPEs, works fine 
} 

} 

當我重新啓動應用程序一切工作正常。早些時候,如果bean自動裝配失敗的A類bean創建失敗並且應用程序不應啓動。相反,應用程序工作正常(除了A類)並且沒有找不到無法自動裝入的異常。所以我想知道這是一個罕見的隨機情況,春天自動裝配變得混亂?我是對的嗎?這是Spring的一個已知問題嗎?

+0

這是完全重新啓動還是代碼熱部署? – Kyle

+0

你可以發佈自動裝配和組件掃描啓用的xml配置嗎? – Kyle

+0

我編輯了這個問題,應用程序使用組件掃描。是的,這是一個完全重新啓動,沒有代碼更改完成。 – broun

回答

0

你確定你的A類本身在Spring環境中嗎?也許你的類B和C是自動掃描的,但不是你的類A(不在你的組件掃描的基本包中)。

在這種情況下,自動裝配在A中被忽略,因此您的theBean實例爲空。

+0

沒有所有的類都被自動掃描。我有這個應用程序近2年,從來沒有這個問題。自動裝配在早些時候和重新啓動後正在發生。就在一次啓動期間,我有這個問題。 – broun

+0

哦,我沒有看到這是一個不可重現的錯誤。真的很奇怪...... – Steph