@Primary的作用
时间: 2023-10-01 09:10:28 浏览: 42
在 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 名称的繁琐操作。