我有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。您能告诉我该怎么做吗?
答案 0 :(得分:0)
这就是我的做法。我创建了一个配置类
@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
这样,我可以根据配置文件自动连接InterfaceA
@Autowired
@Qualifier("myclass")
private InterfaceA myclass;
尽管ClassE仍然可以引用classB
@Component
public class ClassE {
@Autowired
ClassB classB;
...
}
答案 1 :(得分:-1)
定义2个配置Java文件:
class ClassA implements InterfaceA
class ClassB implements InterfaceA
示例配置文件1:
Profile1Config.java
@Configuration
@Profile("profile1")
public class Profile1Config {
@Bean
public InterfaceA interfaceA() {
return new ClassA();
}
}
示例配置文件2:
Profile1Config.java
@Configuration
@Profile("profile2")
public class Profile2Config {
@Bean
public InterfaceA interfaceA() {
return new ClassB();
}
}
以及您想在哪里使用它:
class ClassC {
@Autowired
private InterfaceA interf;
}
class ClassD {
@Autowired
private InterfaceA interf;
}
要注意的重点: 1.不需要@Qualifier。 2. Java配置类中提到了@Profile。 3. @Service已从classA和classB中删除,而现在已在Config *类中定义。