java有两个类继承了相同父类,怎么通过@Resource分别注入
时间: 2024-09-10 12:10:40 浏览: 47
详解Spring关于@Resource注入为null解决办法
在Java中,如果你有两个类A和B都继承自同一个父类C,并且你想通过@Autowired或@Resource注解分别注入这两个不同的子类实例,你需要确保以下几点:
1. 首先,你需要将`@Resource`或`@Autowired`注解应用到需要注入的对象上,而不是直接应用在类上。通常会放在方法上,特别是构造函数上。
例如:
```java
// 如果是Spring框架
public class ServiceImpl { // 类似Service层的类
private C instanceA;
private C instanceB;
@Autowired
public ServiceImpl(@Qualifier("instanceA") C instanceA, @Qualifier("instanceB") C instanceB) {
this.instanceA = instanceA; // 这里的instanceA应该是A类实例
this.instanceB = instanceB; // 这里的instanceB应该是B类实例
}
}
@Configuration
public class AppConfig {
@Bean(name = "instanceA")
public A aInstance() {
return new A();
}
@Bean(name = "instanceB")
public B bInstance() {
return new B();
}
}
```
或者使用`@Qualifier`指定具体的bean名称:
```java
@Service
public class MyClass {
private C instanceA;
private C instanceB;
@Resource(name = "aInstance") // 使用"aInstance"作为A的bean名称
public void setInstanceA(C instanceA) {
this.instanceA = instanceA;
}
@Resource(name = "bInstance") // 使用"bInstance"作为B的bean名称
public void setInstanceB(C instanceB) {
this.instanceB = instanceB;
}
}
```
2. 在`AppConfig`或其他配置类中,你需要为每个子类提供单独的`@Bean`定义,并给它们起特定的名称。
注意:这里的`@Qualifier`不是Spring 4.x之前的版本所使用的`@Named`,它用于指定依赖注入的bean的特定名称。
阅读全文