Spring01_ioc之bean的创建和生命周期

Spring Bean的生命周期 Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring容器。这里,我们讲的也是 ApplicationContext中Bean的生命周期。而实际上BeanFactory也是差不多的,只不过处理器需要手动注册。 阅读详情

1 首先,新建一个maven项目, 在pom.xml中导入spring相关

<packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.7.RELEASE</version>
        </dependency>
    </dependencies>

2 在resources下面新建bean.xml文件, 配置spring的bean容器. resources即为项目类的根路径

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--第一种方法: 使用默认的构造函数.
        在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他标签时,使用默认的构造函数创建
        (重写有参构造方法之后,一定要重写无参构造)
        <bean id="accountService" class="com.hr.service.impl.AccountServiceImpl"/>
    -->

    <!--第二种方法(在jar包中的类的某个方法): 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入容器中)-->
    <!--<bean id="instanceFactory" class="com.hr.factory.InstanceFactory"/>
    <bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"/>-->

    <!--第三种方法(在jar包中的类的某个方法): 使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入容器中)-->
    <!--<bean id="accountService" class="com.hr.factory.StaticFactory" factory-method="getAccountService"/>-->

    <!--
    bean对象的生命周期:
        单例对象:
            出生: 当容器创建时对象出生
            活着: 只要容器还在,对象一直活着
            死亡: 容器销毁,对象消亡
            死亡: 单例对象的生命周期和容器相同
        多例对象:
            出生: 当我们get对象的时候(使用对象)时spring框架为我们创建
            活着: 对象只要是在使用过程中就一直活着
            死亡: 当对象长时间不用,且没有别的对象引用时候,由Java的垃圾回收器回收

    -->

    <bean id="accountService" class="com.hr.service.impl.AccountServiceImpl" scope="prototype"
        init-method="init" destroy-method="destory"
    />

</beans>

AccountServiceImpl实体类: 

public class AccountServiceImpl implements IAccountService {


    public AccountServiceImpl() {
        System.out.println("AccountServiceImpl创建了");
    }

    public void saveAccount() {
        System.out.println("service中的saveAccount执行了 ");
    }

    private void init() {
        System.out.println("对象初始化了");
    }

    private void destory() {
        System.out.println("对象销毁了");
    }
}

测试类: 

package com.hr;

import com.hr.dao.impl.AccountDaoImpl;
import com.hr.service.IAccountService;
import com.hr.service.impl.AccountServiceImpl;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class Client {

    public static void main(String[] args) {
//        testIoc01();
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
        IAccountService as = (IAccountService) applicationContext.getBean("accountService");
        //手动关闭容器
        applicationContext.close();

    }

    private static void testIoc01() {
        //        /*-------------ApplicationContext-------------*/
//        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//        AccountServiceImpl accountService = (AccountServiceImpl) ac.getBean("accountService");
//        AccountDaoImpl accountDao = (AccountDaoImpl) ac.getBean("accountDao");
//        System.out.println(accountService);
//        System.out.println(accountDao);


        //        /*-------------BeanFactory-------------*/
        Resource resource = new ClassPathResource("bean.xml");
        BeanFactory factory = new XmlBeanFactory(resource);
        AccountServiceImpl accountService = (AccountServiceImpl) factory.getBean("accountService");
        System.out.println(accountService);
    }
}

笔记: 

两个容器:
    ApplicationContext: 顶级父类是BeanFactory, 但是创建对象的策略是立即加载的方式,只要一读完配置文件就马上创建配置文件中
                        的对象 (单例对象适用: Servlet, Service等)
    BeanFactory: :延迟加载, 什么时候根据id获取对象了, 什么时候才真正的创建对象 (多例对象适用)

Spring对bean的管理细节:
    1 创建bean的三种方式
        第一种方法: 使用默认构造函数创建
        第二种方法: 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入容器中)
        第二种方法: 使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入容器中)
    2 bean对象的作用范围:
        默认是单例的, bean标签的scope可以调整
        scope取值:
            singleton: 单例的(默认值)
            prototype: 多例的
            request: 作用于web应用的请求范围
            session: 作用于web应用的会话范围
            global-session: 作用于集群环境的会话范围(全局会话范围), 当不是集群环境时,它就是session
    3 bean对象的生命周期:
              单例对象:
                  出生: 当容器创建时对象出生
                  活着: 只要容器还在,对象一直活着
                  死亡: 容器销毁,对象消亡
                  死亡: 单例对象的生命周期和容器相同
              多例对象:
                  出生: 当我们get对象的时候(使用对象)时spring框架为我们创建
                  活着: 对象只要是在使用过程中就一直活着
                  死亡: 当对象长时间不用,且没有别的对象引用时候,由Java的垃圾回收器回收
        

代码托管地址: 

https://github.com/2402zmybie/spring01

Spring Bean 生命周期的执行流程 Java 中的公共类称之为Java Bean,而 Spring 中的 Bean 指的是将对象的生命周期,交给Spring IoC 容器来管理的对象。所以 Spring 中的 Bean 对象在使用时,无需通过 new 来创建对象,只需要通过 DI(依赖注入),从 Spring 中取出要使用的对象即可。 阅读详情

相关推荐

比较几款国际主流的电子元器件及物料清单管理软件 – 工具汇总

Arenasolution 老牌的基于云计算物料清单管理软件,bom.com就是他们家的,10天免费试用,功能被分成4个不同的产品, 和传统ERP功能上有重叠,偏向于物流生产规划,一定程度可以取代ERP的生产规划模块,平均价格70美元/月/席位。网页客户端,不支持离线   SiliconExpert 曾经的老牌物料清单管理软件,后被Arrow 收购,14天免费试用,功能被分成4个不同的产品

u012062784的专栏 7235

spring创建Bean的流程以及Bean的生命周期

1.spring创建Bean流程 1.读取Bean的定义信息 通过BeanDefinitionReader这个接口解析xml配置、配置类或其他的一些方式定义的类,得到BeanDefinition(Bean定义信息) 2.实例化Bean 通过BeanPostProcessor这个接口(增强器)可以对我们的BeanDefinition进行一些修改,然后BeanFactory通过反射实例化Bean对象,但是此时的Bean对象还没有进行初始化,没有填充属性等操作。 3.初始化Bean (1)自定义属性赋值是用 s

好好玩的博客 6430

Anolis龙蜥内核升级实战:从查询到配置的全流程指南

本文提供了一份详尽的Anolis龙蜥操作系统内核升级实战指南。文章从升级的必要性出发,逐步讲解了升级前的系统检查与备份、从官方源获取正确内核包、分步安装与验证、配置默认启动项以及升级后的功能验证与安全回滚方案。旨在帮助运维人员安全、平稳地完成内核升级,以获取性能提升、新硬件支持及重要的安全漏洞修复。

qq_27496129的博客 571

Spring容器里面 Bean的创建与Bean的生命周期

在工作或者学习中我们经常会使用spring的依赖注入来创建对象,并且将对象交给IOC容器去管理。那么spring究竟是如何为我们创建bean,以及是如何管理bean的呢? bean的创建 我们可以看AbstractApplicationContext类中的refresh方法,spring在容器创建完成之后会调用refresh方法来初始化、刷新容器里面的bean: 这里我们把这个方法抠出来看看 @...

JenKin的博客 1757

宇树智能人形机器人模块化腿部动力系统技术拆解

o电机防摔防护板(3.1.5.1)→端盖总成(3.1.5.2)→电机外壳(3.1.5.4)的冲击力传递路径;o散热风扇(3.1.3.1)推动冷风→大腿基座腔体→散热片组(3.1.5.7)→中空大腿杆排出;o防御专利:覆盖“关节热管理风道接口标准”、“抗冲击结构身份编码”;o大腿杆腔体(3.1.3.4)内置反平行四边形机构,避免连杆外露。:力传感器(3.1.8.4.2)仅部署于足端,缺失关节力矩反馈。:更换行星减速器(3.1.5.5)需拆解整个电机模块;o热量传导路径:电机定子→外壳→散热片组。

weixin_50955533的博客 1231

2024最新Typora配置指南:从安装到打造学术写作环境(含LaTeX/参考文献解决方案)

本文提供2024年最新Typora配置指南,详细讲解如何从安装开始,结合Pandoc、Zotero和LaTeX,打造高效的学术写作环境。指南涵盖Typora深度定制、学术主题配置、参考文献自动管理以及一键生成出版级PDF的完整解决方案,旨在帮助科研人员和学生实现内容与格式分离,大幅提升论文写作效率。

weixin_29258297的博客 210

Bean的生命周期和创建方式

1 package spring; 2 3 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 import java.util.Calendar; 7 8 public class Circle { 9 10 private do...

weixin_30532759的博客 140

YOLOv8优化:独家创新(SC_C_Detect)检测头结构创新,实现涨点 | 检测头新颖创新系列

独家创新(SC_C_Detect)检测头结构创新,适合科研创新度十足,强烈推荐

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4865

Spring复习 day(1)Bean的创建方式及生命周期

文章目录一、 创建Bean的三种方式1.1 使用默认构造函数创建1.2 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)1.3 使用静态工厂中的方法创建对象二、spring的配置文件简单演示2.1 applicationcontext的常用实现类2.2 查看接口的实现类2.3 ApplicationContext和BeanFactory的区别2.4 什么时候使用...

初心魏的博客 509

LSTM 双向 Bi-LSTM

LSTM 双向 Bi-LSTM

jacke121的专栏 1516

基于YOLO-world训练模型的完整教程:从数据准备到微调训练

本文提供了YOLO-world模型训练的完整教程,涵盖从环境配置到微调训练的全流程。首先介绍了YOLO-world项目的安装与配置步骤,包括依赖安装和CUDA环境设置;接着详细说明了数据集的准备方法,包括COCO格式数据集的组织结构和自定义数据集的类别定义;然后阐述了配置文件的修改要点,包括超参数调整和数据集路径设置;最后讲解了训练命令的使用方法及常见问题的解决方案。本教程旨在帮助读者快速掌握YOLO-world模型的训练技能,适用于计算机视觉领域的研究人员和开发者。

FJN110的博客 1108

Spring的Bean初始化过程和生命周期

Spring中Bean生命周期真的不难

初心不忘、始终方得 3526

浪涌抗扰度部分解读

8.3 测试仪器: 8.3.1浪涌发生器(对于连接到对称通信线的接口采用10/700us的组合波发生器;对于其他情况采用1.2/50us(8/20us)组合波发生器,输出极性正负可调、移相范围0-360°可调,最大重复率至少每分钟1次,开路输出电压0.5-4kV,电源线的话有效效输出阻抗为2Ω,通信线的话有效输出阻抗为40Ω) 8.3.2 耦合/去耦网络 8.3.3 参考接地平板 8...

喵叫兽的博客 2503

Spring01:框架介绍、Spring核心(IOC、DI、AOP)、Spring优点、入门(pom依赖-创建log4j、Spring配置文件、创建对象)、DI、Bean作用范围和生命周期

1 框架简介 盖房子的时候搭建的架子 自己编码的时候遵循框架的约束即可 2 Java中的框架 2.1 Struct2 Spring Hibernate 2.2 SpringMvc Spring Mybatis 2.3 SpringBoot 3 Spring核心(JavaBean的管理) 3.1 IOC(控制反转) 把对象的创建权交给Spring容器 3.2 DI(依赖注入) 在把对象交给IOC容器的时候,注入对象的属性 3.3 AOP(面向切面编程) 是面向对象的功能延伸.不是替换面向对象,

qq_39497997的博客 345

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Spring 注解驱动】学习笔记 04 - Spring AOP(四)AOP原理【AnnotationAwareAspectJAutoProxyCreator】注册流程分析

Spring AOP 源码系列 04 - AOP原理之【AnnotationAwareAspectJAutoProxyCreator】注册流程分析

MichelleChung的星球 868

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【spring02】Spring 管理 Bean-IOC,基于 XML 配置 bean

在 spring 的 ioc 容器, 在默认是按照单例创建的,即配置一个 bean 对象后,ioc 容器只会创建一个 bean 实例。

qq_74232707的博客 2278

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring 01:IoC、Bean与依赖注入

从Spring开始重新了解SpringBoot,关于IoC、Bean与依赖注入

dfraetaem的博客 1948

【Spring源码核心篇-01】精通Spring的bean的生命周期

精通spring的bean的生命周期

zhenghuishengq的博客 1805

详解Spring中Bean的作用域与生命周期

目录 一、Bean的作用域 1、单实例Bean声明 2、多实例Bean声明 二、Bean的生命周期 1、bean的初始和销毁 2、bean的后置处理器 Hello,你好呀,我是灰小猿!一个超会写bug的程序猿! 在利用Spring进行IOC配置时,关于bean的配置和使用一直都是比较重要的一部分,同时如何合理的使用和创建bean对象,也是小伙伴们在学习和使用Spring时需要注意的部分,所以这一篇文章我就来和大家讲一下有关Spring中bean的作用域和其生命周期。 一、Bean的作用域

累计发表博客60余万字,优快云 博客专家、Java 领域优质创作者、华为云享专家、阿里云专家博主。专注分享 Java 优质文章,毕设实战项目开发,全网粉丝10W+ 3184

Spring创建bean的四种方式

spring创建bean的四种方式,spring的基本概念

W31003的博客 7900

Spring IOC中bean的生命周期

Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务。 Spring IOC 容器中 Bean 的生命周期如下: ① 通过构造器或工厂方法创建 Bean 实例 : 调用构造器 ② 为 Bean 的属性设置值和对...

chuli5375的博客 465

Spring Bean的生命周期流程

Spring 中 Bean 的生命周期是指:Bean 在 Spring(IoC)中从创建到销毁的整个过程。无需通过 new 来创建对象,只需要通过 DI(依赖注入),从 Spring 中取出要使用的对象即可。

A_aspectJ的博客 1655

Spring之IOC原理、注解开发、Bean生命周期

包含Spring5 IOC容器的相关知识、Bean的生命周期、自动装配、注解开发等内容

weixin_48244108的博客 1014

Spring之IOC

由于 id 属性指定了 bean 的唯一标识,所以根据 bean 标签的 id 属性可以精确获取到一个组件对象。刚才的演示我们使用的就是这种方式。所以对一个JavaBean来说,无参构造器和属性的getXxx()、setXxx()方法是必须存在的,特别是在框架中。使用 p 名称空间的方式可以省略子标签 property,将组件属性的设置作为 bean 标签的属性来完成。而bean的id是根据需要装配组件的属性的属性名来确定的。指定的类型』的返回结果,只要返回的是true就可以认定为和类型匹配,能够获取到。

qq_57907966的博客 1491

Spring:IOC容器和Bean详解

Spring:IOC容器和Bean详解

qq_43745578的博客 1705

Spring——IOC

Spring是容器(可以管理所有的组件(类))框架什么是容器(Container): 从程序设计角度看就是封装对象的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期,如Tomcat就是Servlet和JSP的容器;为什么说Spring是一个一站式的轻量级开源框架呢?​ 轻量级:不是指Spring框架的模块少,数量很轻,而是Spring的优点Spring的体系结构图核心容器:提供了框架的基本组成部分,包括 IOC 和依赖注入功能。

会奔跑的茄子的博客 764
上一篇: flutter学习一之抽离自定义组件,Text,Image组件
下一篇: Spring01_ioc之依赖注入
zmybiealex
博客等级 码龄10年 48粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值