使用JavaConfig的Spring Autowire问题,getBean返回null(无异常)

时间:2014-07-06 02:19:37

标签: spring

使用Spring 4.0.3.RELEASE ...

我一直在将基于Spring XML的配置转换为JavaConfig,而且我遇到了一个我不理解的问题。在开发人员的机器(Windows 7和8)上运行时一切正常,但在构建服务器(Ubuntu)上运行时失败 - 作为构建的一部分,我们开始进行单元测试,并且在构建运行时进行单元测试服务器他们都失败了。症状是应用程序上下文getBean(“name”)返回null。以下是设置方法:

package com.x.common;

public class BeanFactory {
    private static ApplicationContext _context;

    static {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
        if (ctx.getEnvironment().getActiveProfiles().length == 0) {
            ctx.getEnvironment().setActiveProfiles("prod");
        }

        ctx.scan("com.x.common.config");
        ctx.refresh();

        _context = ctx;
    }

    public static Object get(String name) {
        return _context.getBean(name);
    }
}

package com.x.common.config;

@Configuration
public class AppConfig {
    @Autowired ILogger logger;
    @Bean public ILogger logger() {
        return logger;
    }
}

@Configuration
@Profile("prod")
public class ProdConfig {
    @Bean public ILogger logger() {
        return new ConsoleLogger("prod");
    }
}

我的单元测试基本上只是

ILogger logger = (ILogger)BeanFactory.get("logger");
assertNotNull("Logger is null", logger);

在开发人员计算机上执行单元测试时,无论是作为构建的一部分还是在Eclipse中单独运行,logger都是ConsoleLogger类型的对象。但是当单元测试在构建机器上执行时(由Jenkins调用),logger为null并且不会抛出任何异常。这里有几个人看过它,但我们都不是Spring大师(事实上我几周前才开始使用Spring),我们无法弄清楚问题是什么。当单元测试第一次开始时,一些东西被记录到控制台(Spring告诉我们它找到了AppConfig并且它用ProdConfig覆盖了返回值),并且在本地运行和运行时的打印输出看起来相同建造机器。关于问题可能是什么,没有什么明显的突出。

使用XML配置文件的情况很好,但是我们没有使用Autowire。

0 个答案:

没有答案