题目
@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(); } } ```