Spring spring

Spring中文网站 > Spring Framework > Spring创建bean的方式有哪几种 Spring创建bean是单例还是多例
Spring创建bean的方式有哪几种 Spring创建bean是单例还是多例
发布时间:2026/03/12 16:18:50

品牌型号:联想ThinkPad X1

系统:Windows10家庭版

软件版本:Spring 5.3.7

做Spring开发的小伙伴们肯定都绕不开Bean这个概念。我们在写代码的时候,常常会下意识的用注解或者配置文件来创建Bean,却很少静下心来梳理到底有多少种创建Bean的方式,有时候项目中出现了一些奇怪的问题排查来排查去却发现竟然跟Bean的创建方式有关,当创建出Bean之后,还有一个很容易记错的点就是Spring创建的到底是单例的还是多例的,很多人凭经验觉得Bean肯定是单例,但是实际开发的时候,可能会遇到Bean实例不唯一的情况就让人犯迷糊。下面就给大家介绍一下Spring创建bean的方式有哪几种,Spring创建bean是单例还是多例的相关内容。

一、Spring创建bean的方式有哪几种

Spring创建Bean的方法主要就四种,每个方式有对应的使用场景,我们先来说我们刚入门Spring的时候就碰到的Xml方式。

早期Spring开发大多数都是依赖XML配置,我们会在配置文件中通过bean标签指定Bean的全类名、属性等信息。当Spring容器启动的时候,就会自动解析Xml然后自动实例化对应的Bean并接管这个Bean的生命周期。

Xml方式创建Bean
图1 :Xml方式创建Bean

现在比较流行的是使用@Component、@Service、@Controller、@Repository这四个注解来创建Bean,再配合@ComponentScan注解扫描对应的包,Spring就能自动识别并实例化Bean,简化了Xml的配置流程。

使用注解创建Bean
图2:使用注解创建Bean

第三种就是通过@Bean注解来创建Bean,如果我们在引入第三方jar包的时候,无法直接在类上添加@Component等注解时,就可以在配置类中定义方法,添加@Bean注解方法的返回值就是要创建的Bean实例。

最后一种方式,还可以通过实现FactoryBean接口的方式创建Bean,这个需要重写接口中的getObject方法,在这个方法里定义创建Bean的逻辑,Spring容器会调用这个方法来获取Bean实例。

实现FactoryBean接口
图3:实现FactoryBean接口

二、spring创建bean是单例还是多例

Spring创建的Bean默认是单例还是多例呢?我们可以在配置中创建一个bean对象,然后写个测试类测试下:

测试默认的Bean的作用域
图4:测试默认的Bean的作用域

在控制台打印出来后,我们发现两次获取Bean对象,两个Bean的地址指向同一个,这说明Spring创建的Bean默认是单例,我们通过打断点也确实可以在单例池中看到Bean实例存在。

断点查看Bean的作用域
图5:断点查看Bean的作用域

那么,Spring是不是只能创建单例Bean呢?当然不是,Spring也可以创建多例的Bean,多例的特点是每次获取Bean实例的时候,都会重新创建一个新的实例,使用完之后会被JVM垃圾回收机制回收,并不会被Spring容器长期管理。我们可以在Bean类上添加注解,或在XML的Bean标签中配置多例属性来创建多例Bean。

修改bean的作用域
图6:修改bean的作用域

以上就是Spring创建bean的方式有哪几种,Spring创建bean是单例还是多例的全部内容了。Spring常见的创建Bean的方式有四种,早期是通过Xml文件配置,但是现在更流行使用注解的方式去创建bean,还有一种比较麻烦的方式是手动创建FactoryBean的实现类,重写里面的getObject方法去创建bean,如果没有做额外的配置,默认 Spring创建出来的Bean是单例的,这么设计主要是为了节省内存资源、减少对象创建销毁的开销,如果需要让Spring创建多例的Bean,可以给Bean修改作用域为prototype。

读者也访问过这里:
180 1563 6924