[英]How to create two beans with the same class by methods?
我想创建 Clazz,我可以在其中创建两个具有相同 class 但配置不同的 Bean。
public class Clazz {
//same class : Client, inside has the different configuration
//inicilized by methods
@Bean(name="Bean1")
public Client1 (){}
@Bean(name = "Bean2")
public Clien2t (){}
}
然后我想将它们注入其他类
public class ClassForInjectBean1{
@Autowired
@Qualifier("Bean1")
@NotNull
Client client
....
}
public class ClassForInjectBean2{
@Autowired
@Qualifier("Bean2")
@NotNull
Client client
....
}
我已经在 ClassForInjectBean1 和 ClassForInjectBean2 类中尝试过这种构造
@Resource(name = "Bean2")
@NotNull
Client client
和
@Autowired
@Qualifier("Bean2")
但是spring不明白
Ошибка:ClassForInjectBean1 中构造函数的参数 1 需要单个 bean,但找到了 2 个: - Bean1:由 class 路径资源中的方法“Client1”定义... - Bean2:由 class 路径资源中的方法“Client2”定义。 . 为什么我不能这样做?
我知道有这种方式https://www.baeldung.com/spring-qualifier-annotation ,但我不会创建很多类和接口。
尝试使用@Configuration
。
表示 class 声明了一个或多个 @Bean 方法,并且可以由 Spring 容器处理以在运行时为这些 bean 生成 bean 定义和服务请求
我为你提供了一些例子。
@Configuration
public class Cfg {
@Bean("client1")
public Client client1() {
return new Client("client1");
}
@Bean("client2")
public Client client2() {
return new Client("client2");
}
}
public class Client {
private String name;
public Client(String name) {
this.name = name;
}
@Override
public String toString() {
return "Client{" +
"name='" + name + '\'' +
'}';
}
}
@Component
public class InjectionTest {
@Component
public class ClassForInjectBean1 {
private final Client client;
public ClassForInjectBean1(@Qualifier("client1") Client client) {
this.client = client;
}
@PostConstruct
public void testInit() {
System.out.println(client.toString());
}
}
@Component
public class ClassForInjectBean2 {
private final Client client;
public ClassForInjectBean2(@Qualifier("client2") Client client) {
this.client = client;
}
@PostConstruct
public void testInit() {
System.out.println(client.toString());
}
}
}
Output 将是:
Client{name='client2'}
Client{name='client1'}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.