[英]Spring call a factory to autowire
有什么方法可以让spring尝试自动装配变量的父类类型的运行时参数来调用工厂?
例如,假设我有这样的事情:
interface IConfig {
}
interface IConfigProvider {
IConfig getConfig(Class<?> type)
}
class MyClass {
@Autowired
private IConfig _config;
}
当在运行时自动装配MyClass._config
以本质上调用IConfigProvider.getConfig(MyClass.class)
(以及上下文中的具体版本IConfigProvider.getConfig(MyClass.class)
时,总有弹簧吗?
我知道我可以为工厂自动布线并自己命名,甚至可以在基类中“隐藏”它,但我正在努力避免这种情况。
注意:我对Spring还是很陌生,所以如果我问的是真的很愚蠢/不使用正确的术语,我深表歉意。
您将需要为此创建一个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以获取更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.