本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看 活动链接
Q:
我知道 @Component
注释是在 Spring 2.5 中引入的,目的是通过使用类路径扫描摆脱 xml bean 的定义。
@Bean
是在 Spring 3.0 中引入的,可以与 @Configuration
一起使用,以完全摆脱 xml 文件并改用 Java config。
是否有可能重新使用 @Component
注解而不是引入 @Bean
注解?我的理解是,两种情况下的最终目标都是创建 Bean。
A:
@Component
和 @Bean
两个做的事情完全不同,不要混淆。
@Component
(以及 @Service
和 @Repository
)用于使用类路径扫描自动检测和自动配置 Bean。在带注解的类和 Bean 之间存在隐式的一对一映射(即每个类一个 Bean)。由于此方法纯粹是声明性的,因此使用此方法对装载的控制非常有限。
@Bean
用于显式声明单个 bean,而不是像上面那样让 Spring 自动执行。它使 Bean 的声明与类定义脱钩,并使您可以完全按照自己的选择创建和配置 Bean。
关于你的问题
是否有可能重新使用
@Component
注解而不是引入@Bean
注解?
当然可以。但他们选择不这样做,因为两者是完全不同的。Spring 已经比较混乱了,没有必要让它更混乱。
Other
#462
@Component
优选用于组件扫描和自动装载
什么时候应该使用 @Bean
?
有时,自动配置不是一个选择。什么时候?假设您想从第三方库连接组件(您没有源代码,因此无法使用 @Component
注解其类),因此无法进行自动配置。
@Bean
注解返回一个对象,该对象应在应用程序上下文中作为 Spring 注册为 Bean。方法的主体具有负责创建实例的逻辑。