在使用 Spring ApplicationContext 时,如下例所示,注释是否得到处理


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

最新更新