作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一组 FactoryBean
的实例其类型为MyFactoryBean
。构造函数采用 Class<?>
并使用它来确定从 getObject()
返回什么:
public class MyFactoryBean implements FactoryBean {
private final Class<?> type;
public MyFactoryBean(Class<?> type) {
this.type = type;
}
@Override
public Object getObject() throws Exception {
return null; // Obviously I return something here rather than null!
}
@Override
public Class<?> getObjectType() {
return type;
}
@Override
public boolean isSingleton() {
return false;
}
}
我的最终结果是控制当类型实例传递给MyFactoryBean
的构造函数时返回的内容。是从上下文中请求的。
我可以像这样在我的上下文中注册它们:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.getBeanFactory().registerSingleton(..., ...);
但是感觉不太对劲,而且 Autowiring 不起作用。我如何在我的上下文中注册这些?
<小时/>编辑:对于 Autowiring ,我注意到肖恩·帕特里克·弗洛伊德在这里的回复:How to get beans created by FactoryBean spring managed?但这仍然没有回答我的问题。
最佳答案
我最终创建了这个解决方案,但我不确定它是否是最好的:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.addBeanFactoryPostProcessor(new BeanDefinitionRegistryPostProcessor() {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
ConstructorArgumentValues cav = new ConstructorArgumentValues();
cav.addGenericArgumentValue(MyClass.class);
RootBeanDefinition bean = new RootBeanDefinition(MyFactoryBean.class, cav, null);
AnnotationBeanNameGenerator generator = new AnnotationBeanNameGenerator();
registry.registerBeanDefinition(generator.generateBeanName(bean, registry), bean);
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { }
});
关于java - 如何在 Spring 中以编程方式注册 FactoryBean 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25649105/
我是一名优秀的程序员,十分优秀!