学习笔记11——Spring的XML配置

学习笔记系列开头惯例发布一些寻亲消息

链接:https://www.baobeihuijia.com/bbhj/contents/3/192584.html
在这里插入图片描述

SSM框架——IOC基础【Bean+Setter注入+加载xml】

  1. 框架总览

    • Spring Framework

      • 谈谈我对Spring的理解 - 知乎 (zhihu.com)
      • java - 【架构视角】一篇文章带你彻底吃透Spring - 框架系列全解 - SegmentFault 思否
    • SpringMVC

      • 用于web页面的三层架构:model view controller
    • Mabatis

      • 用于链接数据库
  2. spring的核心IOC与DI

    • 原始问题:如果在一个类中new一个对象,那么这个对象的类定义发生改变时,这个类也会发生变化,那么就需要重新编译,上线
    • 控制反转:解耦,不要类之间互相new对象了,我们类,都把对象创建和初始化的权利全都放到外部的一个IOC容器,IOC可以从JVM方法区拿到类的字节码定义以及运行时常量池,来生成对象Bean。
    • 依赖注入DI:在容器中,如果两个对象之间存在依赖关系,IOC就直接就绑好
  3. IOC实操(对象在容器的取与拿)

    • pom中需要导入spring坐标

    • 在resources下配置spring,新建一个applicationContext.xml(相当于spring的IOC容器

    • 把类以bean的形式放入到spring容器中,起一个别名

      <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
      
    • 获取bean

      // 获取IOC容器
      ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
      // 获取bean
      BookDao bookDao = (BookDao)ctx.getBean("bookDao");
      bookDao.save();
      
      BookServie bookservice = (BookServie)ctx.getBean("bookService");
      
  4. DI实操(建立对象之间的依赖关系)

    • // 取出类内部new另一个类对象的代码
      
      private BookDao bookDao;
      // 改用set方法来描述,容器会根据配置将对象注入
      public void setBookDao(BookDao bookDao){
      	this.bookDao = bookDao;
      }
      
    • <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
      <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"/>
      
      改写为
      
      <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
      <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
      	// 第一个是set内的名字,ref后边是bean
      	<property name = "bookDao" ref="bookDao"/>
      </bean>
      
    • 修改单例为多例

      <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" scope="singleton"/>
      <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" scope="prototype"/>
      
  5. bean实例化的一些古老方法

    • 一、构造方法:容器调用无参构造方法得到的对象,是通过反射得到的(哪怕构造方法是类内私有也可以构造)
    • 二、静态工厂
    • 三、实例工厂
      • 改进:FactoryBean方法,一个factory对象,但是内部都是getobject写的是要new的对象
  6. 依赖注入方式

    • setter注入(拿的时候写好属性和setter,存的时候要写好bean以及property)

      • 引用类型

      • 简单类型

        <property name="databaseName"  value="mysql"/>
        
    • 构造器注入

      • 引用类型

        public BookServiceImpl(BookDao bookDao, UserDao userDao) {
                this.bookDao = bookDao;
                this.userDao = userDao;
        }
        
        <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
                <constructor-arg name="userDao" ref="userDao"/>
                <constructor-arg name="bookDao" ref="bookDao"/>
        </bean>
        
      • 简单类型

        	private String databaseName;
            private String connectionNum;
        
            public BookDaoImpl(String databaseName, String connectionNum) {
                this.databaseName = databaseName;
                this.connectionNum = connectionNum;
            }
            
            <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
                <!--根据构造方法参数位置注入-->
                <constructor-arg index="0" value="mysql"/>
                <constructor-arg index="1" value="100"/>
            </bean>
        
    • 两种方式的选择

      • 构造器注入是强制必须执行的,而setter注入可能会不进行注入导致对象为null
      • 首选setter
  7. 依赖自动装配(只能用于引用类型注入,不能简单类型)

    • 类型匹配:内部用setter,外部按照setter类型找到对应的bean注入,要求类型只有一个
    • 按名匹配:内部用setter,外部按照setter的名字找到对应的bean注入,不推荐使用
  8. 集合注入:array list set map property

  9. 加载管理一个第三方资源

    • 如果想要使用别的工具,那么需要pom中导入包,然后利用导入的类新建一个bean对象,就可以使用这些类工具了

    • 连接池对象

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • 在bean中读取配置文件:开启一个context命名空间,使用context加载properites文件

      在这里插入图片描述

    • 使用属性占位符读取properites文件

      在这里插入图片描述

    // 如果文件中的名字和系统的名字重复,那么需要在context读取的时候添加
    <context:property-placeholder location="jdbc.properties,jdbc2.properties" system-properties-mode="NEVER"/>
    // 加载全部properties
    <context:property-placeholder location="*.properties" system-properties-mode="NEVER"/>
    // 加载当前路径以及依赖的jar包的properties
    <context:property-placeholder location="classpath*.properties" system-properties-mode="NEVER"/>
    
  10. 容器生命周期

    • 容器加载

    • 在这里插入图片描述

    • 获取bean

      在这里插入图片描述

    • beanFactory初始化bean(调用构造函数)会延时加载,而applicationcontext初始化bean会立即加载

    • 容器关闭

    • <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"  init-method="init",destory-mewthod="destory"/>
      
      # 关闭容器才能执行对象的销毁操作
      // 方法一
      ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
      ctx.closee();
      
      // 方法二:关闭钩子
      ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
      ctx.registerShutdownHook();
      
    • 流程(bean对象仍然为普通对象,也会通过垃圾回收机制收集)

      • 初始化容器
      • 当 Spring 容器启动时,它会读取配置文件并实例化容器中的所有对象Bean,调用构造方法,根据方法区的字节码创建对象
      • 执行属性注入setter
      • 容器中该bean的init
      • 如果遇到关闭销毁容器,则执行bean的销毁方法

象仍然为普通对象,也会通过垃圾回收机制收集)
- 初始化容器
- 当 Spring 容器启动时,它会读取配置文件并实例化容器中的所有对象Bean,调用构造方法,根据方法区的字节码创建对象
- 执行属性注入setter
- 容器中该bean的init
- 如果遇到关闭销毁容器,则执行bean的销毁方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/271382.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年12月25日学习总结——MLP

&#x1f4a1;我准备每一天都写一个学习总结&#xff0c;周末再把每日的学习总结汇总成专门的文章 &#x1f506;我的学习总结主要是为了自己的个人学习&#xff0c;没有商业用途&#xff0c;侵删 okkk开始今日学习 目录 1、今日计划学习内容2、今日学习内容深入学习MLP&#…

AI赋能金融创新:ChatGPT引领量化交易新时代

文章目录 一、引言二、ChatGPT与量化交易的融合三、实践应用&#xff1a;ChatGPT在量化交易中的成功案例四、挑战与前景五、结论《AI时代Python量化交易实战&#xff1a;ChatGPT让量化交易插上翅膀》&#x1f4da;→ [当当](http://product.dangdang.com/29658180.html) | [京东…

Android/iOS APP备案流程指南

Android/iOS APP备案流程指南 摘要 本文通过详细介绍了工信部对移动互联网应用程序&#xff08;APP&#xff09;备案的要求&#xff0c;解释了APP备案的定义、时间节点、办理流程以及腾讯云、阿里云的备案流程&#xff0c;最后提供了常见问题的解答。 引言 随着移动互联网的…

MyBatis见解4

10.MyBatis的动态SQL 10.5.trim标签 trim标签可以代替where标签、set标签 mapper //修改public void updateByUser2(User user);<update id"updateByUser2" parameterType"User">update user<!-- 增加SET前缀&#xff0c;忽略&#xff0c;后缀…

C# 初识System.IO.Pipelines

写在前面 在进一步了解Socket粘包分包的过程中&#xff0c;了解到了.NET 中的 System.IO.Pipelines&#xff0c;可以更优雅高效的解决这个问题&#xff1b;先跟随官方的示例做个初步的认识。 System.IO.Pipelines 是一个库&#xff0c;旨在使在 .NET 中执行高性能 I/O 更加容…

C/C++ 指针和const

const用于指针有一些很微妙的地方。可以用两种不同的方式将const关键字用于指针。 第一种方法时让指针指向一个常量对象&#xff0c;这样可以防止使用该指针来修改所指向的值&#xff1b; 第二中方法是将指针本身声明为常量&#xff0c;这样可以防止改变指针指向的位置。 首先…

[LitCTF 2023]Follow me and hack me

[LitCTF 2023]Follow me and hack me wp GET & POST 传参 这里用 HackBar &#xff0c;GET 传参 CTFLit2023 &#xff0c;POST 传参 Challengeim_c0m1ng &#xff0c;拿到 flag &#xff1a; 提示说备份文件还有好吃的&#xff0c;那么我们就来获取一下备份文件。 获取备…

解决国内大模型痛点的最佳实践方案

1.前言 自AI热潮掀起以来&#xff0c;国内互联网大厂躬身入局&#xff0c;各类机构奋起追赶&#xff0c;创业型企业纷至沓来。业内戏称&#xff0c;一场大模型的“百模大战”已经扩展到“千模大战”。 根据近期中国科学技术信息研究所发布的《中国人工智能大模型地图研究报告…

传输方式和传输速率

目录 传输方式 传输速率 传输方式 基带传输和频带传输 按照传输系统在传输数据信号过程中是否搬移其频谱&#xff0c;传输方式可分两类&#xff1a; 基带传输 指不搬移信号频谱的传输体制。频带传输 指利用调制解调器搬移信号频谱的传输体制。搬移频谱的目的是为…

数字调制学习总结

调制&#xff1a;将基带的信号的频谱搬移到指定的信道通带内的过程。 解调&#xff1a;把指定信号通带内的信号还原为基带的过程。 1、2ASK调制 原理如下图所示&#xff0c;基带信号为单极不归零码&#xff0c;与载波信号相乘&#xff0c;得到调制信号。 调制电路可以用开关…

输电线路定位:智能化技术助力线路维护

在现代社会&#xff0c;电力供应是人们生活和工业生产的重要保障。然而&#xff0c;随着电网规模的不断扩大&#xff0c;输电线路的维护和管理面临着越来越大的压力。如何快速、准确地定位输电线路故障&#xff0c;提高巡线效率&#xff0c;确保电网的安全稳定运行&#xff1f;…

1280×1024分辨率大画幅热红外三光AI无人机吊舱

LTIS505型1280热红外三光无人机吊舱是利卓公司结合了红外热成像、可见光相机与激光测距为一体的产品。 产品支持双波段成像&#xff0c;可以同时输出高清热红外与可见光视频&#xff0c;带有激光测距&#xff0c;可支持扩展AI目标识别跟踪功能。 热红外支持12801024大画幅热…

【MYSQL】MYSQL 的学习教程(七)之 慢 SQL 优化思路

1. 慢 SQL 优化思路 慢查询日志记录慢 SQLexplain 分析 SQL 的执行计划profile 分析执行耗时Optimizer Trace 分析详情确定问题并采用相应的措施 1. 慢查询日志记录慢 SQL 如何定位慢SQL呢&#xff1f; 我们可以通过 慢查询日志 来查看慢 SQL。 ①&#xff1a;开启慢查询日志…

微小奇迹的呵护:新生儿早产的温馨关怀

引言&#xff1a; 早产儿是生命的奇迹&#xff0c;但他们需要更多的呵护和关爱。对于家庭而言&#xff0c;正确的护理和关注对于早产儿的健康至关重要。本文将深入探讨早产儿的定义、早产的原因&#xff0c;以及家长在面对早产的时候应该采取的关键措施&#xff0c;为这些微小…

LeetCode刷题--- 优美的排列

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​​​​http://t.cs…

十大VSCODE 插件推荐2023

1、海鲸AI 插件链接&#xff1a;ChatGPT GPT-4 - 海鲸AI - Visual Studio Marketplace 包含了ChatGPT(3.5/4.0)等多个AI模型。可以实现代码优化&#xff0c;代码解读&#xff0c;代码bug修复等功能&#xff0c;反应迅捷&#xff0c;体验出色&#xff0c;是一个多功能的AI插件…

C++设计模式 #7 工厂方法(Factory Method)

“对象创建”模式 通过“对象创建”模式绕开new&#xff0c;来避免对象创建&#xff08;new&#xff09;过程中所导致的紧耦合&#xff08;依赖具体类&#xff09;&#xff0c;从而支持创建的稳定。它是接口抽象之后的第一步工作。 动机 在软件系统中&#xff0c;经常面临着创…

.net core 表达式树Expression代码定义

表达式树是一种数据结构&#xff0c;它将代码表达式表示为可以在运行时修改和执行的层次结构。 我们通常在LINQ中使用表达式树来主动地将查询转换为针对各种数据源的可执行格式。翻译过程包括将查询表达式的声明性语法转换为一系列方法调用。 我们还可以在需要使用运行时代码…

云服务器ECS运维管理

目录 实时掌握CPU、内存使用情况 实时掌握存储的使用情况 定期对云服务器数据做好备份 定期检查云服务器的安全运行情况 要想保证云服务器长期稳定的使用&#xff0c;除了依靠阿里云&#xff08;云服务提供商&#xff09;的技术支持&#xff0c;自身必要的安全维护手段也是…

Opencv_CUDA实现推理图像前处理与后处理

Opencv_CUDA实现推理图像前处理与后处理 通过trt 或者 openvino部署深度学习算法时&#xff0c;往往会通过opencv的Mat及算法将图像转换为固定的格式作为输入openvino图像的前后处理后边将在单独的文章中写出今晚空闲搜了一些opencv_cuda的使用方法&#xff0c;在此总结一下前…