@Qualifier和@Primary区别
时间: 2023-07-03 14:33:36 浏览: 94
Spring @Primary和@Qualifier注解原理解析
`@Qualifier`和`@Primary`注解都可以用于解决Spring容器中存在多个同类型的Bean的问题,但它们的使用场景和作用有所不同。
`@Qualifier`注解用于指定一个Bean的名称或ID,以便在注入时指定使用哪个Bean。例如,如果有两个实现了同一个接口的Bean,您可以在注入时使用`@Qualifier`注解指定所需的Bean。示例代码如下:
```
@Service
public class FooServiceImpl implements FooService {
// ...
}
@Service
public class BarServiceImpl implements FooService {
// ...
}
@Service
public class MyService {
private final FooService fooService;
private final FooService barService;
public MyService(@Qualifier("fooServiceImpl") FooService fooService,
@Qualifier("barServiceImpl") FooService barService) {
this.fooService = fooService;
this.barService = barService;
}
}
```
`@Primary`注解用于指定一个Bean为首选的Bean。如果存在多个同类型的Bean,且没有使用`@Qualifier`注解指定使用哪个Bean时,Spring将选择带有`@Primary`注解的Bean作为首选的Bean。例如,如果有两个实现了同一个接口的Bean,您可以在其中一个上使用`@Primary`注解,示例代码如下:
```
@Service
@Primary
public class FooServiceImpl implements FooService {
// ...
}
@Service
public class BarServiceImpl implements FooService {
// ...
}
@Service
public class MyService {
private final FooService fooService;
public MyService(FooService fooService) {
this.fooService = fooService;
}
}
```
在上面的代码中,如果没有使用`@Qualifier`注解指定使用哪个Bean,Spring将选择带有`@Primary`注解的`FooServiceImpl`作为首选的Bean。
阅读全文