gpt4 book ai didi

java - Spring 3.0 中的 FactoryBeans 和基于注解的配置

转载 作者:IT老高 更新时间:2023-10-28 13:47:24 25 4
gpt4 key购买 nike

Spring 提供了 FactoryBean 接口(interface)以允许对 bean 进行非平凡的初始化。该框架提供了许多工厂 bean 的实现,并且——当使用 Spring 的 XML 配置时——工厂 bean 很容易使用。

但是,在 Spring 3.0 中,我找不到一种令人满意的方式来使用工厂 bean 和基于注释的配置(née JavaConfig)。

显然,我可以手动实例化工厂 bean 并自己设置任何所需的属性,如下所示:

@Configuration
public class AppConfig {

...

@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(dataSource());
factory.setAnotherProperty(anotherProperty());

return factory.getObject();
}

但是,如果 FactoryBean 实现了任何 Spring 特定的回调接口(interface),例如 InitializingBeanApplicationContextAwareBeanClassLoaderAware<,这将失败@PostConstruct 例如。我还需要检查FactoryBean,找出它实现了哪些回调接口(interface),然后通过调用setApplicationContextafterPropertiesSet()等自己实现这个功能。

这让我感觉很尴尬和背对前:应用程序开发人员不应该实现 IOC 容器的回调。

有谁知道从 Spring Annotation 配置中使用 FactoryBeans 的更好解决方案?

最佳答案

我认为当您依赖自动布线时,这个问题得到了最好的解决。如果您对 bean 使用 Java 配置,则如下:

@Bean
MyFactoryBean myFactory()
{
// this is a spring FactoryBean for MyBean
// i.e. something that implements FactoryBean<MyBean>
return new MyFactoryBean();
}

@Bean
MyOtherBean myOther(final MyBean myBean)
{
return new MyOtherBean(myBean);
}

因此 Spring 将为我们注入(inject)由 myFactory().getObject() 返回的 MyBean 实例,就像它对 XML 配置所做的那样。

如果您在@Component/@Service 等类中使用@Inject/@Autowire,这也应该有效。

关于java - Spring 3.0 中的 FactoryBeans 和基于注解的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5541094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com