- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
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),例如 InitializingBean
、ApplicationContextAware
、BeanClassLoaderAware<,这将失败
或 @PostConstruct
例如。我还需要检查FactoryBean,找出它实现了哪些回调接口(interface),然后通过调用setApplicationContext
、afterPropertiesSet()
等自己实现这个功能。
这让我感觉很尴尬和背对前:应用程序开发人员不应该实现 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/
小问题:如果我有实现 FactoryBean 接口(interface)的类,我如何从 FactoryBean 对象本身而不是 FactoryBean.getObject() 中获取? 长问题:我必须
我没有看到 FactoryBean 用于创建 bean 的实用程序...为什么不能在 Configuration 类中创建相应的 bean? FactoryBean 有什么需要? 我知道我在这里遗漏了
是否可以向 FactoryBean 添加一个非空默认构造函数,其中参数由 @Value 注入(inject)? @Service public class DateTimeFormatterFacto
我有一个应用程序,我希望能够根据属性文件中的值切换 DAO 实现。 Spring FactoryBean 接口(interface)看起来工作得很好,因为我可以通过 FactoryBean 提供 DA
我正在尝试编写一个 Spring FactoryBean 来生成 Request 对象的列表。请求的数量和进入其中的值可以在运行时配置,因此我想使用这些属性。 每个请求都包含一对 ID 值,因此我需要
我想一起使用 FactoryBeans 和范围。具体来说,我希望将 FactoryBean 创建和返回的对象放入指定的(可能是自定义的)范围内。问题在于执行以下操作: 导致 FactoryBean
我在 Spring Boot 应用程序中的项目类: package com.example.demo; public class FirstModel { public String getS
我正在通过 XML 配置和实例工厂方法实例化一些 bean: 我通过 BeanFactory.getBean("bean", arguments...) 以编程方式实例化我的原型(prototyp
假设我有以下 Spring 配置(Spring 版本为 3.0.3): 我有 FactoryBean 实现的实例和其他一些实例。我需要 Spring 注入
我刚刚开始使用 Spring 3 MVC,目前使用的是 3.2.4.RELEASE。我已经使用 spring 工具套件创建了基本项目,并添加了 Hibernate 和 mysql 的配置。这是我添加到
我正在尝试在 spring 版本 4.3.6 中解析 FactoryBean 中的泛型类型。我使用用于创建任意数量的 CarClient 实例的 FactoryBean 创建 bean。 public
我有一组 FactoryBean 的实例其类型为MyFactoryBean 。构造函数采用 Class并使用它来确定从 getObject() 返回什么: public class MyFactory
是否有可能创建一个 POJO bean 将/可以被 Spring 视为 FactoryBean。所以我想创建一个 FactoryBean 类(有 getObject、getType、isSinglet
我正在尝试使用 org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean 在 Spring 4 中创建一个 FreeMa
我使用假客户端微服务并收到以下错误 - $ mvn spring-boot:run [INFO] Scanning for projects... [INFO] [INFO] ------------
Spring 提供了 FactoryBean 接口(interface)以允许对 bean 进行非平凡的初始化。该框架提供了许多工厂 bean 的实现,并且——当使用 Spring 的 XML 配置时
FactoryBean可用于以编程方式创建可能需要复杂实例化逻辑的对象。 但是,FactoryBean创建的bean似乎没有成为spring管理的。这种解释正确吗?如果是这样,有什么好的解决方法吗?包
我知道在使用 XML ( Spring ) 定义 bean 时可以获得对 factorybean 实例的引用。例如。: 但这也可以通过注释来做到这一点吗? (也许使用@Autowired 和@Qua
我想用自定义 Converter 创建一个 Spring ConversionService,但是 ConversionServiceFactoryBean#getObject 的返回值为 null。
我有两个接口(interface) IFoo 的实现: Foo1和 Foo2 . 我需要上下文才能为任何需要 IFoo 的类注入(inject)正确的上下文该类不知道它将获得什么实现(因此不使用 @Q
我是一名优秀的程序员,十分优秀!