那spring是根据@Bean来查找MyRepository接口的实现类的吗
时间: 2024-02-24 18:59:49 浏览: 59
Spring学习笔记之bean生命周期
不一定。`@Bean` 注解用于声明一个方法,该方法返回一个实例对象,并将该实例对象注册到 Spring 容器中进行管理。通常情况下,`@Bean` 注解用于声明一个需要被注入到其他组件中的对象。
如果 `MyRepository` 接口有多个实现类,可以使用 `@Qualifier` 注解指定具体的实现类,或者使用 `@Primary` 注解指定一个默认的实现类。例如:
```java
@Repository
@Primary
public class MyRepositoryImpl1 implements MyRepository {
// ...
}
@Repository
public class MyRepositoryImpl2 implements MyRepository {
// ...
}
```
在上面的代码中,`@Primary` 注解指定了 `MyRepositoryImpl1` 类是默认的实现类,如果需要注入 `MyRepository` 接口的实现类时,如果没有指定具体的实现类,Spring 会自动选择 `MyRepositoryImpl1` 类。
另外,如果你需要通过 `@Bean` 注解手动创建 `MyRepository` 实例对象并注册到 Spring 容器中,也可以使用 `@Qualifier` 注解指定具体的实现类。例如:
```java
@Configuration
public class AppConfig {
@Bean
@Qualifier("impl1")
public MyRepository myRepositoryImpl1() {
return new MyRepositoryImpl1();
}
@Bean
@Qualifier("impl2")
public MyRepository myRepositoryImpl2() {
return new MyRepositoryImpl2();
}
}
```
在上面的代码中,使用 `@Qualifier` 注解指定了 `myRepositoryImpl1` 方法返回的对象是 `MyRepositoryImpl1` 类的实例,以及 `myRepositoryImpl2` 方法返回的对象是 `MyRepositoryImpl2` 类的实例。这样,在其他组件中需要注入 `MyRepository` 实例对象时,可以使用 `@Qualifier` 注解指定具体的实现类。
总之,Spring 可以根据多种方式来查找 `MyRepository` 接口的实现类,其中包括 `@Bean` 注解、`@Qualifier` 注解、`@Primary` 注解等。
阅读全文