Bean生命周期

简介: Bean生命周期

Bean作用域生命周期的基本概念

如果想学习SpringBean的生命周期,那么就必须要学习Bean的作用域。

1:singleton(唯一bean实例,由Spring容器管理其生命周期)
2:prototype(原型bean,创建后容器不管理其生命周期)
3:request(每次http都产生新的bean,仅在http request内有效)
4:session(首次http请求创建一个实例,作用域是浏览器首次访问直至浏览器关闭)
5:global-session(全局 session 作用域,仅仅在基于 Portlet 的 web 应用中才有意义,Spring5 已经没有了。

1、singleton 是默认的作用域,我们如果不对bean的scope配置项进行配置的话,默认就是Singleton类型。 在创建起容器时就同时自动创建了一个 bean 的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。

2、prototype: 原型bean,每次对此类型的bean进行请求的时候,都会创建一个新的bean实例。与我们 java中的new效果类似。Spring 只负责创建,当容器创建了 Bean 的实例后,Bean 的实例就交给客户端代码管理,Spring 容器将不再跟踪其生命周期。

3、request:每次HTTP请求都会创建一个新的Bean

4、session:首次http请求创建一个实例,作用域是浏览器首次访问直至浏览器关闭

5、global-session:作用域范围是WebApplicationContext中。一般用于Portlet应用环境,该运用域仅适用于WebApplicationContext环境。

后三种只有在web环境下才有效,这篇文章重点介绍前两种。

通过实例理解两种方式创建bean的不同

/**
 空类:AService
 */
@Component
//@Scope("prototype")
public class AService {
}
/**
 配置文件
 */
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    <!--开启注解的支持-->
    <context:annotation-config/>
    <!-- 自动扫描指定包及其子包下的所有Bean类 -->
    <context:component-scan base-package="com.tfjy.test"/>
    <!--    将AService设置为原型bean-->
<!--    <bean id="AService" class="com.tfjy.test.AService" scope="prototype"></bean>-->
</beans>
/**
 Test类
 */
public class Test {
    //bean验证
    @org.junit.Test
    public void beanTest(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        AService aServiceOne = context.getBean("AService",AService.class);
        AService aServiceTwo = context.getBean("AService",AService.class);
        System.out.println(aServiceOne);
        System.out.println(aServiceTwo);
        //通过equals方法判断两个对象是否相等
        if(aServiceOne.equals(aServiceTwo)){
            System.out.println("两次getBean方法,获得了同一个单例对象");
        }else{
            System.out.println("两次getBean方法,获得的不是同一个单例对象");
        }
    }
}
/**
 pom文件
 */
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

没有配置bean的作用域的结果:

可以看到内存地址一样,证明默认单例形式。

如何转换成property类型的bean呢?

1.注解方式。

在需要交由IOC容器管理的bean对象类上面添加**@Scope(“prototype”)**注解。

2.xml配置文件方式

<bean id="AService" class="com.tfjy.test.AService" scope="prototype"></bean>

两种方式中的任意一种运行的结果

相关文章
|
前端开发 JavaScript 容器
使用echarts遇到的问题及解决
使用echarts遇到的问题及解决
1117 0
|
人工智能 分布式计算 DataWorks
连续四年!阿里云领跑中国公有云大数据平台
近日,国际数据公司(IDC)发布《中国大数据平台市场份额,2023:数智融合时代的真正到来》报告——2023年中国大数据平台公有云服务市场规模达72.2亿元人民币,其中阿里巴巴市场份额保持领先,占比达40.2%,连续四年排名第一。
713 12
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
|
安全 网络安全 数据安全/隐私保护
什么是双因素身份验证 (2FA)?
【4月更文挑战第14天】
2733 2
|
JavaScript 前端开发
在 JeecgBoot 项目中基于 Vue 3 配置多页面入口
本文介绍了在JeecgBoot Vue 3项目中配置多页面入口的步骤。首先,确保下载了项目源码,然后在项目根目录创建`home.html`作为新页面模板。接着,在`src`下建立`multiPage/home`目录,包含`App.vue`和`main.ts`文件以构建新页面。最后,更新`build/vite/plugin/html.ts`中的`htmlPlugin`以支持多页面配置。完成这些步骤后,项目将具备管理多个独立页面的能力。
404 4
|
安全 Java 网络安全
Spring Framework JDK >= 9 远程代码执行(CVE-2022-22965)
Spring Framework JDK >= 9 远程代码执行(CVE-2022-22965)
|
监控 NoSQL Redis
Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
|
网络协议 Java 网络安全
【计算机网络】—— Socket通信编程与传输协议分析
【计算机网络】—— Socket通信编程与传输协议分析
3036 0
|
机器学习/深度学习 人工智能 数据挖掘
2024年,计算机相关专业还值得选择吗?
2024年,计算机相关专业还值得选择吗?
|
缓存 安全 数据安全/隐私保护
在智能媒体服务中,跨域问题可以通过设置CORS(跨源资源共享)规则来解决
在智能媒体服务中,跨域问题可以通过设置CORS(跨源资源共享)规则来解决
330 4

热门文章

最新文章