春天叫工厂自动装配

时间:2014-04-09 09:36:50

标签: java spring factory autowired

有没有办法让spring调用一个带有运行时参数的工厂,该参数是它试图自动装配的变量的父类的类型?

例如,让我说我有这样的事情:

interface IConfig {
}

interface IConfigProvider {

    IConfig getConfig(Class<?> type)
}

class MyClass {

    @Autowired
    private IConfig _config;
}

有没有春天,当自动装配MyClass._config在运行时基本上调用IConfigProvider.getConfig(MyClass.class)(以及上下文中的具体版本)来连接变量?

我知道我可以自动工厂并自己打电话,我甚至可以隐藏&#34;它在基类中,但我试图避免这种情况。

注意:我对Spring很新,所以如果我问的是一些非常愚蠢的事情/没有使用正确的术语,我道歉。

1 个答案:

答案 0 :(得分:0)

您需要为此创建FactoryBean。这样的事情可以解决问题。

class IConfigFactoryBean implements FactoryBean<IConfig> {

    @Autowired
    private IConfigProvider configProvider;

    private IConfig config;

    @PostConstruct
    public void initialize() {
        config = configProvider.getConfig(...);
    }


    @Override
    public IConfig getObject() throws Exception {
        return config;
    }

    @Override
    public Class<?> getObjectType() {
        return ...;
    }

    @Override
    public boolean isSingleton() {
        return true;
    }
}

我不确定这个论点会是什么。请注意,如果您有多个IConfig实例,则需要将它们限定为Spring,以便能够根据简单的@Autowired注释知道它必须注入哪一个。检查@Qualifier的javadoc以获取更多信息。