Spring bean作用域介绍

项目路径:https://gitee.com/wuhan1/spring-parent.git 下的spring-05
什么是spring bean?在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。

spring中的bean默认的是单例模式,前提是基于同一个JVM实例。

作用域
1.单例singleton,在spring ioc容器中仅存在一个bean,ioc容器启动时创建。可以设置为懒加载,第一次使用时创建,后续的直接使用,不再创建新的实例,避免bean过多,启动时一次性创建过多的bean,而这些bean又没用到。
配置bean,不设置任何属性


启动容器,发现bean已创建


设置懒加载,启动时不创建,第一次调用时创建,设置属性 lazy-init="true"


启动容器发现没有创建bean

调用bean两次

两次返回的地址是一样的

如果所有的bean都需要设置懒加载,则在beans标签里设置,<beans default-lazy-init="true">


2.原型prototype,容器启动时不创建,每次调用bean时,创建返回一个新的实例。设置属性scope="prototype",对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。

启动容器,发现没哟创建bean实例,然后调用两次,创建了两个不同的bean实例,地址不同

3.request,每次http请求时创建一个新的bean,该作用域仅适用于WebApplicationContext
4.session,同一个http session共享一个bean,不同的session使用不同的bean,仅适用于WebApplicationContext
5.global session,表示在一个全局的HTTP Session中,一个bean定义对应一个实例,一般用于portlet环境,仅适用于WebApplicationContext

一般使用的是前面2种。

获取所有的bean实例名称

String[] beanDefinitionNames = context.getBeanDefinitionNames();

注册bean的几种方式:
1、@Configuration+@Bean方式
2、@Import方式
3、FactoryBean(工程bean)
实现FactoryBean接口

注册Bean

获取bean

猜你喜欢

转载自blog.csdn.net/dhj199181/article/details/108631617