欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring bean作用域介绍

程序员文章站 2022-07-12 12:57:22
...

项目路径: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,不设置任何属性
Spring bean作用域介绍
Spring bean作用域介绍
启动容器,发现bean已创建
Spring bean作用域介绍

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

Spring bean作用域介绍
启动容器发现没有创建bean
Spring bean作用域介绍

调用bean两次
Spring bean作用域介绍
两次返回的地址是一样的
Spring bean作用域介绍
如果所有的bean都需要设置懒加载,则在beans标签里设置,<beans default-lazy-init="true">
Spring bean作用域介绍

2.原型prototype,容器启动时不创建,每次调用bean时,创建返回一个新的实例。设置属性scope="prototype",对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。
Spring bean作用域介绍
启动容器,发现没哟创建bean实例,然后调用两次,创建了两个不同的bean实例,地址不同
Spring bean作用域介绍

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

一般使用的是前面三种。

获取所有的bean实例

String[] beanDefinitionNames = context.getBeanDefinitionNames();

注册bean的几种方式:
1、@aaa@qq.com方式
2、@Import方式
3、FactoryBean(工程bean)
实现FactoryBean接口
Spring bean作用域介绍
注册Bean
Spring bean作用域介绍
获取bean
Spring bean作用域介绍