春天的豆与组件

Java教程 2025-08-20

@Bean vs @component在Spring Boot中

Spring @Bean和@component注释之间的关键区别在于,@Bean注释用于公开您自己写的Javabeans,而@Component注释则暴露了Javabeans,其源代码由其他人维护。

弹簧框架的核心是其控制器(IOC)容器的倒置,该容器管理您应用程序最重要的弹簧豆的生命周期。但是,IOC容器无法管理类Path上的每个Java组件。它仅管理您明确要求其管理的Javabeans的生命周期。

您什么时候使用Spring的@Bean注释?

例如,如果您自己编写Javabean,则可以将Spring的@Bean注释直接添加到源代码中。在这里,我们要求Spring的IOC容器管理分数类的所有实例的生命周期。

 @beanpublic class得分{int获胜,损失,领带;}

您什么时候使用Spring的@Component注释?

但是,如果您希望Spring的IOC容器从Swagger的OpenAPI或JDBC API中的数据源组件管理文档对象,该怎么办?

您不能简单地在JDK中编辑代码,并在标准API的类中添加@BEAN注释。那就是@component注释的来源。

如果您希望Spring管理您无法控制的代码的Javabean,则创建一种返回所讨论Javabean实例的方法,然后用@Component注释来装饰该方法。这是一个简单的春季启动示例,确切说明:

 @configurationpublic类myconfig {@component public dataSource getMyHikarIdatAsource(){hikaridataSource ds = new hikaridataSource(); ds.setjdbcurl(“ JDBC:H2:MEM:Roshambo”);返回DS; } @component public objectmapper getMyObjectMmapper(){objectMapper mapper = new objectMapper(); mapper.enable(serializationfeature.indent_output);返回映射器; }}}

在此示例中,我们使用@Component注释告诉Spring IOC容器来管理DataSource和ObjectMapper Bean的生命周期。

这些组件来自Jackson和JDBC API,因此我们没有编辑源代码的能力。这就是为什么我们不能直接在类声明上方添加@BEAN注释的原因。但是,我们可以使用@component注释,以及在类文件本身上放置的@configuration注释,告诉Spring以管理这些外部提供的资源。

@component而不是@bean?

@component注释不仅仅用于外部API。开发人员可以完全允许使用@Component注释,而不是@Bean注释来揭露他们自己写的Javabeans。

如果我们从上面的分数类中删除了@BEAN注释,则可以通过使用@Component注释来通过IOC容器公开分数:如下所示:

 @configurationpublic类Myroshamboconfig {@component public Scuper getThescore(){return new Score}}

您什么时候应该使用@component vs @bean?

在较大的春季启动项目中,我倾向于@component比@bean更喜欢@component。使用@component将您的配置保持集中,通常是在专用的配置文件中,这有助于保持实际的Javabeans清洁,并且没有特定于框架的注释。这使您的代码库更加模块化,更易于在春季之外进行测试或重复使用。

但是,对于较小的项目或快速原型,我倾向于使用@bean。它更简单,更直接,并且非常适合您不需要复杂配置的轻质设置。如果您的目标是快速旋转微服务,@Bean可以帮助您以最少的开销快速移动。