Bean作用域和生命周期

news/2024/10/21 9:58:31/

修改的Bean案例

User:

package com.bean;import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;public class User {private int id;private String name;@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

Users:

package com.bean;import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;@Controller
public class Users {@Beanpublic User user1() {User user = new User();user.setId(1);user.setName("Java");return user;}
}

Controller1:

package com.bean.controller;import com.bean.User;
import com.bean.Users;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;@Controller
public class Controller1 {@Autowiredprivate User user1;public User getUser1() {User user = user1;System.out.println("原来的Name:"+user.getName());user.setName("Golang");return user;}
}

Controller2:

package com.bean.controller;import com.bean.User;
import com.bean.Users;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;@Controller
public class Controller2 {@Autowiredprivate User user1;public User getUser1() {User user = user1;return user;}
}

App(启动类):

import com.bean.User;
import com.bean.controller.Controller1;
import com.bean.controller.Controller2;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Created by 伦敦看日出* Description:* User: yyt* Date: 2023-04-22* Time: 15:41*/
public class App {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");Controller1 controller1 = context.getBean(Controller1.class);System.out.println("A对象修改之后Name:"+controller1.getUser1().toString());Controller2 controller2 = context.getBean(Controller2.class);System.out.println("B对象读取到的Name:"+controller2.getUser1().toString());}
}

执行结果:

原来的Name:Java
A对象修改之后Name:User{id=1, name=‘Golang’}
B对象读取到的Name:User{id=1, name=‘Golang’}

分析

Bean默认情况是单例模式(可以提高性能),所有人使用的是同一个对象,所以Bean作用域也是单例模式

作用域定义

Bean 的作⽤域是指 Bean 在 Spring 整个框架中的某种⾏为模式,⽐如 singleton 单例作⽤域,就表 示 Bean 在整个 Spring 中只有⼀份,它是全局共享的,那么当其他⼈修改了这个值之后,那么另⼀个 ⼈读取到的就是被修改的值。

Bean原理分析

Bean执行流程(Spring执行流程): 1.启动 Spring 容器 -> 2.实例化 Bean(分配内存空间,从⽆到有) -> 3.Bean 注册到 Spring 中(存操作) -> 4.将 Bean 装配到需要的类中(取操作)。

  1. 启动main
  2. 加载XML实例化内存
  3. 将5大类注解对象存储
  4. 将注入的对象属性进行初始化

Bean生命周期

  1. 实例化 Bean(为 Bean 分配内存空间)

  2. 设置属性(Bean 注⼊和装配)

  3. Bean 初始化

    实现了各种 Aware 通知的⽅法,如 BeanNameAware、BeanFactoryAware、 ApplicationContextAware 的接⼝⽅法; 
    执⾏ BeanPostProcessor 初始化前置⽅法; 
    执⾏ @PostConstruct 初始化⽅法,依赖注⼊操作之后被执⾏; 
    执⾏⾃⼰指定的 init-method ⽅法(如果有指定的话);
    执⾏ BeanPostProcessor 初始化后置⽅法。
    
  4. 使⽤ Bean

  5. 销毁 Bean

销毁容器的各种⽅法,如 @PreDestroy、DisposableBean 接⼝⽅法、destroy-method。 执⾏流程如下图所示:
在这里插入图片描述


http://www.ppmy.cn/news/51716.html

相关文章

Tomcat 配置与部署

http 协议就是 http 客户端和 http 服务器之间通信的协议 , 而Tomcat 就是 java 圈子中最广泛使用的 http 服务器. 下载Tomcat Tomcat官网 Tomcat 的版本 , 和后续的 servlet 版本是强相关的 , 此处使用 tomcat 8 , 对应的 servlet 就是 3.1 下载一个 zip 压缩包解压缩即可 T…

什么蓝牙耳机适合学生党?学生党蓝牙耳机性价比排行

现如今,市场上有各种各样的品牌和蓝牙耳机,让人在选择时不免眼花缭乱。作为学生党,在选择一样东西的时候,性价比无疑会成为其选择的重要参考因素。下面,我来给大家分享几款适合学生党的高性价比蓝牙耳机,一…

通达信结构紧凑形态选股公式编写思路

在威廉欧奈尔的《笑傲股市》、马克米勒维尼的《股票魔法师》等书籍中都有结构紧凑形态的相关描述,股票在形成基底时,价格波动幅度逐渐减小,量能逐步萎缩,同时价格相对强度较高。 结构紧凑的形态通过眼睛观察,一般可以…

ChatGPT应用篇:如何快速生成精美PPT提高工作效率-附资料下载

一、ChatGPT生成markdown源代码 问: 我想做一份ChatGPT变现方法的PPT,请生成丰富的教学展示内容,因为生成PPT是需要MarkDown格式的,请您输出Markdown格式的内容 ChatGPT回复: 二、Mindshow登录/注册 用浏览器打开Mi…

GNU make的官方生成依赖例子理解

GNU make的官方生成依赖例子理解 直接贴代码 直接贴代码 %.d : %.cset -e; \gcc -MM $< > $.$$$$; \sed s,\($*\)\.o[ :]*,\1.o $ : ,g < $.$$$$ > $; \rm -f $.$$$$对于sed ‘s,($).o[ :],\1.o $ : ,g’ < . . .$$$ > $;不是很理解&#xff0c;通过查找资…

人脸检测和行人检测2:YOLOv5实现人脸检测和行人检测(含数据集和训练代码)

人脸检测和行人检测2&#xff1a;YOLOv5实现人脸检测和行人检测(含数据集和训练代码) 目录 人脸检测和行人检测2&#xff1a;YOLOv5实现人脸检测和行人检测(含数据集和训练代码) 1. 前言 2. 人脸检测和行人检测数据集说明 &#xff08;1&#xff09;人脸检测和行人检测数据…

系统集成项目管理工程师——考试重点(三)项目管理一般知识

1.项目定义&#xff1a; 为达到特定的目的&#xff0c;使用一定资源&#xff0c;在确定的期间内&#xff0c;为特定发起人提供独特的产品、服务或成果而进行的一系列相互关联的活动的集合。 2.项目目标&#xff1a; 成果性目标&#xff1a;项目产品本身 约束性目标&…

MATLAB机器学习、深度学习在图像处理中的应用

近年来&#xff0c;随着无人驾驶汽车、医学影像智慧辅助诊疗、ImageNet竞赛等热点事件的发生&#xff0c;人工智能迎来了新一轮的发展浪潮。尤其是在计算机视觉和图像处理领域&#xff0c;各种颠覆性的成果应运而生。 点击查看原文 导师&#xff1a;郁磊副教授&#xff1a;主…