news 2026/4/18 9:53:10

Spring Bean的生命周期

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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没有打印出来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 17:16:34

3.3 可用性测试竟然还能这样玩?

3.3 重大发现!可用性测试竟然还能这样玩? 在构建高可用系统时,仅仅设计出高可用架构是不够的,还需要通过系统的测试和演练来验证架构的有效性。可用性测试和容灾演练是确保系统在真实故障场景下依然能够稳定运行的关键手段。本节将深入探讨如何设计和实施有效的可用性测试…

作者头像 李华
网站建设 2026/4/18 2:08:24

用 CANN ops-nn 提升 AI 性能:实操技巧与核心逻辑拆解

在昇腾 AI 生态中&#xff0c;CANN&#xff08;Compute Architecture for Neural Networks&#xff09;是核心的异构计算架构&#xff0c;而 ops-nn 作为 CANN 针对神经网络算子的核心组件&#xff0c;直接决定了 AI 模型在昇腾硬件上的运行效率。本文将从核心逻辑、实操技巧、…

作者头像 李华
网站建设 2026/4/18 2:07:24

思考是用来解决问题和总结经验的,而不是用来制造障碍的:不为打翻的牛奶哭泣底层逻辑是,哭泣仅仅是情绪表达,不是在解决问题,我们应该想的是尽快打扫不要扎到脚

别让思考&#xff0c;变成困住你的墙&#xff1a;从内耗到破局的底层逻辑 目录 别让思考&#xff0c;变成困住你的墙&#xff1a;从内耗到破局的底层逻辑一、两种思考&#xff0c;两种人生&#xff1a;你在破局&#xff0c;还是在筑墙&#xff1f;1. 制造障碍的思考&#xff1a…

作者头像 李华
网站建设 2026/4/17 12:28:06

【小程序毕设全套源码+文档】基于Android的陪诊护理系统APP的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/18 2:08:01

本科生必看!万众偏爱的AI论文网站 —— 千笔ai写作

你是否曾为论文选题发愁&#xff0c;反复修改却总不满意&#xff1f;是否在查重和格式上耗费大量时间&#xff0c;却仍难达标&#xff1f;论文写作的每一步都像一场硬仗&#xff0c;让无数本科生倍感压力。而千笔AI&#xff0c;正是为了解决这些难题而生。它集智能写作、文献检…

作者头像 李华