@Primary作用
时间: 2023-08-17 16:12:26 浏览: 71
@Primary 是一个注解(Annotation),在 Spring 框架中有特殊的作用。当多个实现类满足某个接口或基类时,可以使用 @Primary 注解在其中一个实现类上进行标记。这样在注入时,Spring 容器会优先选择带有 @Primary 注解的实现类。
例如,假设有一个接口 `Animal`,有两个实现类 `Cat` 和 `Dog`。如果我们在 `Cat` 类上使用了 `@Primary` 注解,那么在注入 `Animal` 类型的对象时,Spring 容器会优先选择 `Cat` 类来进行注入。
这样做的好处是可以减少配置的复杂性,提高代码的可读性。同时,在某些特定场景下,我们可能需要指定首选的实现类,而 @Primary 注解就提供了这样的功能。
相关问题
@Primary 作用
@Primary 注解是在 Spring Framework 中使用的一种方式,用于解决依赖注入时的歧义性。当一个接口有多个实现类时,使用 @Primary 注解可以指定其中一个实现类作为默认的候选项。这样,在注入该接口类型的时候,就会优先选择标有 @Primary 注解的实现类。这样做可以简化配置,避免歧义,并提高代码的可读性。
@Primary的作用
在 Spring 中,如果存在多个同类型的 Bean,可以使用 `@Primary` 注解来指定其中一个为首选的 Bean,当注入该类型的 Bean 时,优先选择被 `@Primary` 注解标记的 Bean。
例如,假设我们有两个实现了同一个接口的 Bean:
```java
public interface Car {
void run();
}
@Component
@Primary
public class BMW implements Car {
@Override
public void run() {
System.out.println("BMW is running");
}
}
@Component
public class Benz implements Car {
@Override
public void run() {
System.out.println("Benz is running");
}
}
```
在这个例子中,我们使用 `@Primary` 注解标记了 `BMW` 类的 Bean,这时当我们注入 `Car` 类型的 Bean 时,会优先选择 `BMW` 类的 Bean:
```java
@Service
public class CarService {
private final Car car;
@Autowired
public CarService(Car car) {
this.car = car;
}
public void run() {
car.run();
}
}
```
```java
@RunWith(SpringRunner.class)
@SpringBootTest
public class CarServiceTest {
@Autowired
private CarService carService;
@Test
public void testRun() {
carService.run(); // 输出 "BMW is running"
}
}
```
当存在多个同类型的 Bean 时,使用 `@Primary` 注解可以方便地指定默认的 Bean,避免了手动指定 Bean 名称的繁琐操作。