public class SomeClass {
@Autowired
public WaterContainer wc;
private static int count = 0;
SomeClass(){ ++count;}
public static int testmethod() {
return count;
}
public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext("spring-configuration\beans.xml");
SomeClass obj = context.getBean(SomeClass.class);
//SomeClass obj2 = new SomeClass();
System.out.println("value of count "+SomeClass.testmethod());
if(obj.wc != null)
System.out.println("wc volume "+obj.wc.getCurrentVolume());
else
System.out.println("wc bean "+context.getBean(WaterContainer.class).getCurrentVolume()); //+(obj.wc==null)
}
}
bean.xml 文件包含以下内容:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean class="com.app.data.SomeClass"/>
<bean class="com.app.mechanism.WaterContainer">
<constructor-arg value="30"/>
</bean>
</beans>
我得到的输出如下所示,但我希望 SomeClass 对象中的字段 wc 不为空,这是否意味着自动连线注释没有得到处理? 还是我在某处出错了?
计数 1
的值WC 豆 30
如果是这样,那么如何
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:spring-configuration\beans.xml"})
为单元测试工作?这里如何处理自动布线
正如 M. Deinum 所说,注释配置内置于某些ApplicationContext
实现中,而不是在其他实现中。
FileSystemXmlConfiguration
是一个没有内置注释配置的实现。您可以使用以下命令启用该注释配置
<context:annotation-config />
(以及相关的命名空间声明(。
由于未启用该配置,因此不会处理@Autowired
字段,并且您的SomeClass#wc
字段将保留null
。
您在内部显示的测试配置使用内置注释配置的AnnotationConfigApplicationContext
。