题目
@Component 和 @Bean 的区别是什么
答案
- **`@Component` 注解作用于类,而 `@Bean` 注解作用于方法**
- `@Component`通常是通过类路径扫描来自动侦测以及自动装配到 Spring 容器中(我们可以使用 `@ComponentScan` 注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的 bean 容器中)。
`@Bean` 注解通常是我们在标有该注解的方法中定义产生这个 Bean,`@Bean` 告诉了 Spring 这是某个类的实例,当我需要用它的时候还给我。
- **`@Bean` 注解比 `@Component` 注解的自定义性更强**,而且很多地方我们只能通过 `@Bean` 注解来注册 bean。比如当我们引用第三方库中的类需要装配到 `Spring`容器时,则只能通过 `@Bean` 来实现。
`@Bean` 注解使用示例:
```java
@Configuration
public class AppConfig {
@Bean
public TransferService transferService() {
return new TransferServiceImpl();
}
}
```
上面的代码相当于下面的 xml 配置
```xml
<beans>
<bean id="transferService" class="com.acme.TransferServiceImpl"/>
</beans>
```
下面这个例子是通过 `@Component` 无法实现的。
```java
@Bean
public OneService getService(status) {
case (status) {
when 1:
return new serviceImpl1();
when 2:
return new serviceImpl2();
when 3:
return new serviceImpl3();
}
}
```
