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

【spring02】Spring 管理 Bean-IOC,基于 XML 配置 bean
在这里插入图片描述
文章目录🌍一. bean 创建顺序🌍二. bean 对象的单例和多例❄️1. 机制❄️2. 使用细节🌍三. bean 的生命周期🌍四. 配置 bean 的后置处理器 【这个比较难】🌍五. 通过属性文件给 bean 注入值🌍六. 基于 XML 的 bean 的自动装配🌍七. spring el 表达式[知道即可]

🙋‍♂️ 作者:@whisperrr.🙋‍♂️

👀 专栏:spring👀

💥 标题:【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean💥

❣️ 寄语:比较是偷走幸福的小偷❣️

🌍一. bean 创建顺序

1.在 spring 的 ioc 容器, 默认是按照配置的顺序创建 bean 对象

<beanid="student01"class="com.hspedu.bean.Student"/><beanid="department01"class="com.hspedu.bean.Department"/>

会先创建 student01 这个 bean 对象,然后创建 department01 这个 bean 对象

2.如果这样配置

<beanid="student01"class="com.hspedu.bean.Student"depends-on="department01"/><beanid="department01"class="com.hspedu.bean.Department"/>

会先创建 department01 对象,再创建 student01 对象.

3.先看下面的配置, 请问两个 bean 创建的顺序是什么? 并分析执行流程

在这里插入图片描述
  1. 先创建 id=memberDAOImpl
  2. 再创建 id = memberServiceImpl
  3. 调用 memberServiceImpl.setMemberDAO() 完成引用

4.先看下面的配置, 请问两个 bean 创建的顺序是什么, 并分析执行流程

在这里插入图片描述
  1. 先创建 id = memberServiceImpl
  2. 再创建 id=memberDAOImpl
  3. 用 memberServiceImpl.setMemberDAO() 完成引用

🌍二. bean 对象的单例和多例

❄️1. 机制

在 spring 的 ioc 容器, 在默认是按照单例创建的,即配置一个 bean 对象后,ioc 容器只会创建一个 bean 实例。
如果,我们希望 ioc 容器配置的某个 bean 对象,是以多个实例形式创建的则可以通过配置scope="prototype" 来指定

  1. 在 spring 的 ioc 容器, 在默认情况下是安装单例创建的,即配置一个 bean 对象后,
    ioc 容器只会创建一个 bean 实例。
  2. 如果,我们希望 ioc 容器配置的某个 bean 对象,
    是以多个实例形式创建的则可以通过配置 scope=“prototype” 来指定
<beanname="car"scope="prototype"class="com.hspedu.spring.beans.Car"/>

❄️2. 使用细节

  1. 默认是单例 singleton, 在启动容器时, 默认就会创建 , 并放入到 singletonObjects 集合
  2. 当 设置为多实例机制后, 该 bean 是在 getBean()时才创建
  3. 如 果 是 单 例 singleton, 同 时 希 望 在 getBean 时 才 创 建 , 可 以 指 定 懒 加 载
    lazy-init=“true” (注意默认是 false)
  4. 通常情况下, lazy-init 就使用默认值 false , 在开发看来, 用空间换时间是值得的, 除非有特殊的要求.
  5. 如果 scope=“prototype” 这时你的 lazy-init 属性的值不管是 ture, 还是 false 都是在getBean 时候,才创建对象.

🌍三. bean 的生命周期

说明: bean 对象创建是由 JVM 完成的,然后执行如下方法

  1. 执行构造器
  2. 执行 set 相关方法
  3. 调用 bean 的初始化的方法(需要配置)
  4. 使用 bean
  5. 当容器关闭时候,调用 bean 的销毁方法(需要配置)
1.init-method=“init” 指定bean的初始化方法 , 在setter方法后执行
2. init方法执行的时机,有spring容器来控制
3. destroy-method=“destroy” 指定bean的销毁方法, 在容器关闭的时候执行
4. destroy方法执行的时机,有spring容器来控制
<beanid="house"class="com.hspedu.spring.beans.House"init-method="init"destroy-method="destory"><propertyname="name"value="北京豪宅"/></bean>
5.初始化 init 方法和 destory 方法, 是程序员来指定
6.销毁方法就是当关闭容器时,才会被调用.

🌍四. 配置 bean 的后置处理器 【这个比较难】

  1. 在 spring 的 ioc 容器,可以配置 bean 的后置处理器
  2. 该处理器/对象会在 bean 初始化方法调用前和初始化方法调用后被调用
  3. 程序员可以在后置处理器中编写自己的代码
<beanid="myBeanPostProcessor"class="com.hspedu.spring.beans.MyBeanPostProcessor"/></beans>

1、怎么执行到这个方法?=> 使用 AOP(反射+动态代理+IO+容器+注解)
2、有什么用?=>

可以对 IOC 容器中所有的对象进行统一处理 ,比如 日志处理/权限的校验/安全的验证/事务管理

3、针对容器的所有对象吗?

是的=>切面编程特点

🌍五. 通过属性文件给 bean 注入值

  1. 通过属性文件给 bean 注入值, 2. 需要导入: xmlns:context 名字空间,并指定属性文件路径
1.先把这个文件修改成提示All Problem
2. 提示错误,将光标放在context 输入alt+enter 就会自动引入namespace
3. location=“classpath:my.properties” 表示指定属性文件的位置
4. 提示,需要带上 classpath
5. 属性文件有中文,需要将其转为unicode编码-> 使用工具
6.通过属性文件给monster对象的属性赋值
7. 这时我们的属性值通过${属性名}
8. 这里说的 属性名 就是 my.properties文件中的 k=v 的k
<context:property-placeholderlocation="classpath:my.properties"/><beanid="monster100"class="com.hspedu.spring.beans.Monster"><propertyname="monsterId"value="${id}"/><propertyname="name"value="${name}"/><propertyname="skill"value="${skill}"/></bean>

🌍六. 基于 XML 的 bean 的自动装配

1.autowire=“byType” 表示 在创建 orderService时通过类型的方式 给对象属性 自动完成赋值/引用
2. 比如OrderService 对象有 private OrderDao orderDao
3. 就会在容器中去找有没有 OrderDao类型对象
4. 如果有,就会自动的装配, 老师提示如果是按照 byType 方式来装配, 这个容器中,不能有两个的OrderDao类型对象
5. 如果你的对象没有属性, autowire就没有必要写
6. 其它类推.
7.如果我们设置的是 autowire=“byName” 表示通过名字完成自动装配
8. 比如下面的 autowire=“byName” class=“com.hspedu.spring.service.OrderService”
1) 先看 OrderService 属性 private OrderDao orderDao
2) 再根据这个属性的setXxx()方法的xxx来找对象id
3) public void setOrderDao() 就会找id=orderDao对象来进行自动装配
4) 如果没有就装配失败
<!--配置OrderDao对象--><beanclass="com.hspedu.spring.dao.OrderDao"id="orderDao"/><beanautowire="byName"class="com.hspedu.spring.service.OrderService"id="orderService"/><beanautowire="byName"class="com.hspedu.spring.web.OrderAction"id="orderAction"/>

🌍七. spring el 表达式[知道即可]

  1. Spring Expression Language,Spring 表达式语言,简称 SpEL。支持运行时查询并可以操作对象。
  2. 和 EL 表达式一样,SpEL 根据 JavaBean 风格的 getXxx()、setXxx()方法定义的属性访问对象
  3. SpEL 使用#{…}作为定界符,所有在大框号中的字符都将被认为是 SpEL 表达式。
  4. 不是重点,如果看到有人这样使用,能看懂即可
<!-- spring el 表达式 --><beanid="spELBean"class="com.hspedu.spring.beans.SpELBean"><!-- sp el 给字面量 --><propertyname="name"value="#{'韩顺平教育'}"/><!-- sp el 引用其它 bean --><propertyname="monster"value="#{monster01}"/><!-- sp el 引用其它 bean 的属性值 --><propertyname="monsterName"value="#{monster02.name}"/><!-- sp el 调用普通方法 赋值 --><propertyname="crySound"value="#{spELBean.cry('喵喵的..')}"/><!-- sp el 调用静态方法 赋值 --><propertyname="bookName"value="#{T(com.hspedu.spring.beans.SpELBean).read(' 天龙八部')}"/><!-- sp el 通过运算赋值 --><propertyname="result"value="#{89*1.2}"/></bean>

Read more

最新电子电气架构(EEA)调研-3

而新一代的强实时性、高确定性,以及满足CAP定理的同步分布式协同技术(SDCT),可以实现替代TSN、DDS的应用,且此技术已经在无人车辆得到验证,同时其低成本学习曲线、无复杂二次开发工作,将开发人员的劳动强度、学习曲线极大降低,使开发人员更多的去完成算法、执行器功能完善。 五、各大车厂的EEA 我们调研策略是从公开信息中获得各大车厂的EEA信息,并在如下中进行展示。 我们集中了华为、特斯拉、大众、蔚来、小鹏、理想、东风(岚图)等有代表领先性的车辆电子电气架构厂商。        1、华为 图12 华为的CCA电子电气架构              (1)华为“计算+通信”CC架构的三个平台                         1)MDC智能驾驶平台;                         2)CDC智能座舱平台                         3)VDC整车控制平台。        联接指的是华为智能网联解决方案,解决车内、车外网络高速连接问题,云服务则是基于云计算提供的服务,如在线车主服务、娱乐和OTA等。 华

By Ne0inhk
Apache IoTDB 架构特性与 Prometheus+Grafana 监控体系部署实践

Apache IoTDB 架构特性与 Prometheus+Grafana 监控体系部署实践

Apache IoTDB 架构特性与 Prometheus+Grafana 监控体系部署实践 文章目录 * Apache IoTDB 架构特性与 Prometheus+Grafana 监控体系部署实践 * Apache IoTDB 核心特性与价值 * Apache IoTDB 监控面板完整部署方案 * 安装步骤 * 步骤一:IoTDB开启监控指标采集 * 步骤二:安装、配置Prometheus * 步骤三:安装grafana并配置数据源 * 步骤四:导入IoTDB Grafana看板 * TimechoDB(基于 Apache IoTDB)增强特性 * 总结与应用场景建议 Apache IoTDB 核心特性与价值 Apache IoTDB 专为物联网场景打造的高性能轻量级时序数据库,以 “设备 - 测点” 原生数据模型贴合物理设备与传感器关系,通过高压缩算法、百万级并发写入能力和毫秒级查询响应优化海量时序数据存储成本与处理效率,同时支持边缘轻量部署、

By Ne0inhk
SQL Server 2019安装教程(超详细图文)

SQL Server 2019安装教程(超详细图文)

SQL Server 介绍) SQL Server 是由 微软(Microsoft) 开发的一款 关系型数据库管理系统(RDBMS),支持结构化查询语言(SQL)进行数据存储、管理和分析。自1989年首次发布以来,SQL Server 已成为企业级数据管理的核心解决方案,广泛应用于金融、电商、ERP、CRM 等业务系统。它提供高可用性、安全性、事务处理(ACID)和商业智能(BI)支持,并支持 Windows 和 Linux 跨平台部署。 一、获取 SQL Server 2019 安装包 1. 官方下载方式 前往微软官网注册账号后,即可下载 SQL Server Developer 版本(

By Ne0inhk