- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序,我希望能够根据属性文件中的值切换 DAO 实现。 Spring FactoryBean 接口(interface)看起来工作得很好,因为我可以通过 FactoryBean 提供 DAO,在其中我可以根据属性值进行切换工作。
this最后一段然而,springsource 博客文章提到了这个警告:
One important takeaway here is that it is the FactoryBean, not the factoried object itself, that lives in the Spring container and enjoys the lifecycle hooks and container services. The returned instance is transient - Spring knows nothing about what you've returned from getObject() , and will make no attempt to exercise any lifecycle hooks or anything else on it.
我的 DAO 对象包含 Spring 注释 @Repository
和 @Transactional
。根据上面的段落,如果我通过 FactoryBean 返回 DAO 实现,这些注释是否会被忽略?如果是这样,确保 Spring 管理 FactoryBean 返回的 bean 的好方法是什么?
编辑:似乎大多数人都在为该问题提供替代配置解决方案。虽然我对这些建议持开放态度(如果它们很好,我会投票赞成),但我的问题实际上与正确的 FactoryBean 使用有关,我将根据这些问题标记正确的答案。
最佳答案
假设你有这样的东西:
public interface FooDao {
// ...
}
@Repository("firstFooDao")
public class FirstFooDao implements FooDao {
//...
}
@Repository("secondFooDao")
public class SecondFooDao implements FooDao {
//...
}
您可以创建一个配置类来根据占位符返回适当的实现(在此示例中为 foo
):
@Configuration
public class FooDaoConfiguration {
@Value("${foo}")
private String foo;
@Autowired
private BeanFactory beanFactory;
@Bean
@Primary
public FooDao fooDao() {
return beanFactory.getBean(foo, FooDao.class);
}
}
然后您可以在属性文件中切换实现:
#foo=firstFooDao
foo=secondFooDao
这样,您的两个实现都由 spring 管理 - 它与您链接的文档中的示例不同,其中返回的对象是使用非 spring 工厂构造的。在这种情况下,所有 bean 都由 spring 实例化。配置类选择其一。
关于java - Spring FactoryBean 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16427393/
小问题:如果我有实现 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
我是一名优秀的程序员,十分优秀!