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 自动装配被搞砸了???我是对的吗?这是 Spring 的一个已知问题吗?

4

1 回答 1

0

您确定您的 A 类本身在 Spring 上下文中吗?也许您的 B 类和 C 类是自动扫描的,但不是您的 A 类(不在组件扫描的基本包中)。

在这种情况下,自动装配只是在 A 中被忽略,因此您的theBean实例为空。

于 2013-04-14T19:25:27.480 回答