xml - 条件依赖注入(inject)

标签 xml spring dependency-injection annotations conditional

我有一个应用程序正在为服务和 Dao 层使用基于注解注解的依赖注入(inject)。现在需要一些条件,一些 dao 将在内存数据结构而不是 db 中运行。 所以,我正在考虑编写这些 dao 的新实现。 由于该服务已经有带有 dao 名称的注释,我不确定如何将内存中的注释注入(inject)它。

我应该在注入(inject)后用内存中的覆盖数据库还是有另一种干净的方法? 如果我使用 xml,我会为内存中的 dao 使用不同的 xml。

提前致谢, 阿曼

最佳答案

如果您的内存 dao 类仅在应该使用它的情况下存在(更确切地说:仅在类扫描时发现),那么您可以在 @Primary

@Primary 表示当找到多个候选时应优先考虑该 bean。

也许你也应该看看 Spring 3.1 feature: Profiles .

另一种方法是编写一个配置,根据某些环境参数返回正确的 bean,并在 primary 上注释:

/**
 * I never have tried to inject a bean in a @Configuratution and
 * return it as @Bean annotated it with @Primary, so it is an experiment 
 * I would been glad to know if it works.
 */
@Configuration
public class Switch {
    @Value("#{systemProperties.inmemmory}") 
    private boolean inMemmory;

    @Resource
    @Qualifier("normal")
    private Dao normalDao;

    @Resource
    @Qualifier("inMemmory")
    private Dao inMemoryDao;

    @Bean
    @Primary
    public Dao dao() {
        if (inMemmory) {
            return inMemory;
        } else {
           return normalDao;
        }
    }
}

关于xml - 条件依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5665063/

相关文章:

android - 如何创建方形按钮(90度角)Android Studio

java - spring - @ContextConfiguration 无法在 src/test/resources 中加载配置文件

php - 如何在 Laravel 之外使用 Laravel 的 IOC 容器进行方法注入(inject)

java - Java 的 MEF (.NET) 模拟

php - Magento Controller 适用于 Windows,不适用于 Linux

java - 无法读取架构文档 'http://www.springframework.org/schema/tool/spring-tool-4.1.xsd'

java - 在 Android 中以编程方式添加 View

java - 无法转换为 org.springframework.orm.hibernate4.LocalSessionFactoryBean

java - Spring WebSecurityConfigurerAdapter 允许 POST?

c# - Azure 队列客户端依赖项注入(inject)