java - 给定配置文件 Autowiring 特定的 bean

标签 java spring

我有 2 个实现 InterfaceA 的类

@Service("classA")
class ClassA implements InterfaceA

@Service("classB")
class ClassB implements InterfaceA

我需要加载两个 bean。但是,在 C 类和 D 类中,我需要指定我需要的 bean

class ClassC {
    @Autowired
    @Qualifier("classA")
    private InterfaceA interf;
}

class ClassD {
    @Autowired
    @Qualifier("classA")
    private InterfaceA interf;
}

但是,我有 2 个配置文件,profile1 和 profile2。如果我使用 -Dspring.profiles.active=profile1,我应该为 classC 和 classD 使用限定符“classA”。如果我使用 -Dspring.profiles.active=profile2,我应该使用“classB”作为限定符。此外,另一个 ClassE 应该始终使用 classB,而不管配置文件如何。你能告诉我应该怎么做吗?

最佳答案

我就是这样做的。我创建了一个配置类

@Configuration
public class ConfigClass {
    @Autowired
    private ClassB classB;

    @Profile("profile1")
    @Qualifier("myclass")
    @Bean
    private InterfaceA classAtProfile1() {return new ClassA();}

    @Profile("profile2")
    @Qualifier("myclass")
    @Bean
    private InterfaceA classAtProfile2() {return classB;}
}

class ClassA implements InterfaceA

@Service("classB")
class ClassB implements InterfaceA

这样,我就可以根据配置文件 Autowiring InterfaceA

@Autowired
@Qualifier("myclass")
private InterfaceA myclass;

虽然E类仍然可以引用B类

@Component
public class ClassE {
    @Autowired
    ClassB classB;
    ...
}

关于java - 给定配置文件 Autowiring 特定的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51978547/

相关文章:

java - 从 Spring RESTful 服务运行 Spark 作业

java - 使用drawRect时图形太慢

java - 有没有办法将 HibernateException 转换为其他内容,然后将 Spring 中的 DataAccessException 转换为其他内容

java - 在 HttpResponse 响应代码中使我的 Android 应用程序崩溃

html - Spring Thymeleaf + Textarea

java - Hibernate 生成比正常情况更多的查询

java - 为什么我需要一个公共(public)方法来使我的注释起作用?

java - Hashmap的get方法中的NullPointerException

java - bufferedReader.readline 返回 null

mysql - 如何配置一个spring+hibernate+mysql项目?