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