2013-04-14 145 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