有没有办法让spring调用一个带有运行时参数的工厂,该参数是它试图自动装配的变量的父类的类型?
例如,让我说我有这样的事情:
interface IConfig {
}
interface IConfigProvider {
IConfig getConfig(Class<?> type)
}
class MyClass {
@Autowired
private IConfig _config;
}
有没有春天,当自动装配MyClass._config
在运行时基本上调用IConfigProvider.getConfig(MyClass.class)
(以及上下文中的具体版本)来连接变量?
我知道我可以自动工厂并自己打电话,我甚至可以隐藏&#34;它在基类中,但我试图避免这种情况。
注意:我对Spring很新,所以如果我问的是一些非常愚蠢的事情/没有使用正确的术语,我道歉。
答案 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以获取更多信息。