当前位置: 首页 > news >正文

Spring Bean的生命周期

Spring Bean的生命周期

一、概述

二、注入单向对象引用属性时

2.1原理

注入单向对象引用属性时,从容器中 getBean 获取后通过 set 方法反射设置进去,如果容器中没有,则先创建被注入对象 Bean 实例(完成整个生命周期)后,在进行注入操作。

2.2实验

1.要注入的属性在要创建bean的前面

applicationContext.xml:

<beanclass="com.itheima.service.impl.UserServiceImpl2"id="userService"><property name="userDao"ref="userDao"/><property name="userName"value="MM"/></bean><bean id="userDao"class="com.itheima.dao.impl.UserDaoImpl"init-method="init"></bean>

测试:

packagecom.itheima.test;importcom.alibaba.druid.pool.DruidDataSource;importcom.itheima.beans.OthrerBean;importcom.itheima.beans.Xxxbean;importcom.itheima.dao.UserDao;importcom.itheima.dao.impl.UserDaoImpl;importcom.itheima.dao.personDao;importcom.itheima.service.UserService;importcom.mysql.jdbc.Connection;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.springframework.beans.factory.config.BeanDefinition;importorg.springframework.beans.factory.support.DefaultListableBeanFactory;importorg.springframework.beans.factory.xml.XmlBeanDefinitionReader;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importjavax.xml.bind.annotation.XmlAccessOrder;importjava.io.IOException;importjava.io.InputStream;importjava.sql.DriverManager;publicclassBeanFactoryTest{publicstaticvoidmain(String[]args)throwsException{ApplicationContextapplicationContext=newClassPathXmlApplicationContext("applicationContext_beanfac.xml");UserServiceuserService=applicationContext.getBean(UserService.class);}}

结果:

直接从BeanDefinitionMap中拿了

2.要注入的属性在要创建bean的后面

applicationContext.xml:

<bean id="userDao"class="com.itheima.dao.impl.UserDaoImpl"init-method="init"></bean><beanclass="com.itheima.service.impl.UserServiceImpl2"id="userService"><property name="userDao"ref="userDao"/><property name="userName"value="MM"/></bean>

结果:

在创建userService发现需要userDao属性但是BeanDefinitionMap中没有,就停下来先创建userDao,然后再继续注册。

三、注入双向对象引用属性

源码流程(由于源码剖析较为繁琐,篇幅太大,所以在这里就没有过多的阐述了,不过下面的图片是较为详细的,可以依据下面的图片自行进行剖析):

四、Aware接口

Aware接口在开发中虽然不常用,但是它的思想却经常用在很多框架进行底层注入bean,常用的Aware接口如下:

实验:

UserServiceImpl:

packagecom.itheima.service.impl;importcom.itheima.dao.UserDao;importcom.itheima.service.UserService;importorg.springframework.beans.BeansException;importorg.springframework.beans.factory.BeanFactory;importorg.springframework.beans.factory.BeanFactoryAware;importorg.springframework.beans.factory.BeanNameAware;importorg.springframework.context.ApplicationContext;importorg.springframework.context.ApplicationContextAware;importorg.springframework.web.context.ServletContextAware;importjavax.servlet.ServletContext;importjava.util.List;importjava.util.Map;importjava.util.Properties;importjava.util.Set;//@Service("userService")publicclassUserServiceImpl2implementsUserService,ServletContextAware,BeanFactoryAware,ApplicationContextAware,BeanNameAware{@Overridepublicvoidshow2(){// 打印集合// System.out.println(userDaoList);// System.out.println(stringList);// 打印集合// System.out.println(userDaoSet);//// 打印集合// System.out.println(stringSet);// System.out.println(userDaoMap);// System.out.println(properties);System.out.println(userDao);}@Overridepublicvoidshow1(){// 打印集合}publicUserServiceImpl2(){// System.out.println("userService已经加载,已执行构造函数");}privateUserDaouserDao;publicvoidsetUserDao(UserDaouserDao){// System.out.println("userServerce执行注入UserDao的操作,即执行set方法");this.userDao=userDao;}@OverridepublicvoidsetBeanFactory(BeanFactorybeanFactory)throwsBeansException{System.out.println(beanFactory);}@OverridepublicvoidsetBeanName(Strings){System.out.println(s);}@OverridepublicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{System.out.println(applicationContext);}@OverridepublicvoidsetServletContext(ServletContextservletContext){System.out.println(servletContext);}}

测试:

packagecom.itheima.test;importcom.alibaba.druid.pool.DruidDataSource;importcom.itheima.beans.OthrerBean;importcom.itheima.beans.Xxxbean;importcom.itheima.dao.UserDao;importcom.itheima.dao.impl.UserDaoImpl;importcom.itheima.dao.personDao;importcom.itheima.service.UserService;importcom.mysql.jdbc.Connection;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.springframework.beans.factory.config.BeanDefinition;importorg.springframework.beans.factory.support.DefaultListableBeanFactory;importorg.springframework.beans.factory.xml.XmlBeanDefinitionReader;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importjavax.xml.bind.annotation.XmlAccessOrder;importjava.io.IOException;importjava.io.InputStream;importjava.sql.DriverManager;publicclassBeanFactoryTest{publicstaticvoidmain(String[]args)throwsException{ApplicationContextapplicationContext=newClassPathXmlApplicationContext("applicationContext_beanfac.xml");UserServiceuserService=applicationContext.getBean(UserService.class);}}

结果:

由于是没有配置web环境,所以servletContext没有打印出来。

http://www.jsqmd.com/news/358926/

相关文章:

  • 【Docusaurus】Doc只有单页的情况
  • multi function vehicle inverter
  • 企业HR招聘时如何看待CAIE认证,其企业认可度具体如何评估?
  • springboot基于HTML的英语学习APP的设计与实现
  • 技术团队负责人:公司内部缺乏AI能力评估标准怎么办?
  • 提示工程架构师如何用Agentic AI实现健康管理预测分析?
  • 2026年,多品牌联动放价!人气茶饮咖啡6.9元起,美团外卖成“更便宜入口” - Top品牌推荐
  • 红外热成像图像电力设备故障缺陷检测数据集VOC+YOLO格式1729张6类别
  • 【YOLOv11多模态创新改进】联合Mamba创新首发| SCI 一 2025| 引入CMFM 跨模态特征融合Mamba模块,实现 RGB与红外等多模态特征的高效融合,含多种创新改进,顶会顶刊发文热点
  • 宏洛图品牌设计:全品类包装设计专家(轻奢化妆品医美护肤品保健品精油礼盒等) - 宏洛图品牌设计
  • 必看深度揭秘!提示工程架构师解析Agentic AI技术发展与应用
  • CANN模型安全与鲁棒性:从对抗防御到隐私保护的全链路实战
  • CANN分布式训练:从单机到千卡集群的弹性扩展实战
  • CANN自动调优与性能分析:从瓶颈定位到极致优化的全链路实战
  • 数据立方体技术演进:从传统BI到大数据分析的跨越
  • Claude Opus 4.6接入VSCode完全指南:从零到精通!
  • 独家秘籍!AI应用架构师谈法律文本AI理解系统的架构设计
  • 攻防世界-happy_puzzle
  • 招聘:AI工程师 vs. 数据工程师
  • 用OpenClaw组建你的创业团队
  • 2二、u-boot移植 - 指南
  • 从概念到代码:4A架构(业务架构、数据架构、应用架构、手艺架构)全景落地指南
  • File.prototype.stream() 和 ReadableStream.getReader()的浏览器兼容性如何?
  • 【YOLOv10多模态创新改进】联合Mamba创新首发| SCI 一 2025| 引入CMFM 跨模态特征融合Mamba模块,实现 RGB与红外等多模态特征的高效融合,含多种创新改进,顶会顶刊发文热点
  • 2月8号
  • 聚焦墙面基底需求,严选山西靠谱腻子粉 - 速递信息
  • 移动端h5路由过渡动画实现教程
  • Error creating bean with name ‘ragController‘: Injection of resource dependencies failed
  • Doris并发控制机制:高并发查询的应对策略
  • 6343456345