Day3 XML方式的Spring应用

news2024/9/25 15:27:00

全文总结

基于XML配置

1、学习了bean标签,

2、三种配置bean的方式:

1、静态工厂;

2、实例工厂和

3、自定义实现factorybean

1 SpringBean 的配置类

inin-method 与构造方法不同,构造方法是创建对象的,等对象创建以后使用inin-method方法对对象进行初始化。

1.1 bean 标签学习

  • bean的id 与class

此时产生的bean对象会被存储到beanFactory的singletonObjects中,beanName为"userDao",值为UserDaoImpl对象。可以根据beanName获取Bean实例

context.getBean("userSerice");

如果不配置id,则spring会把bean实例的全限定名作为beanName

context.getBean("cn.msf.dao.impl.UserDaoImpl");
  • bean的name 起别名

实际中使用较少。

主要是因为在beanFactory中有一个属性为aliasMap。可以将别名与beanName联系在一起,由于是一个map因此别名不能重复,否则会被覆盖。

  • Bean的范围配置

默认情况下,单纯的Spring环境Bean的作用范围有两个: Singleton和Prototypesinaleton

singleton单例,默认值,Spring容器创建的时候,就会进行Bean的实例化,并存储到容器内部的单例池中每次getBean时都是从单例池中获取相同的Bean实例;

prototype: 原型,Spring容器初始化时不会创建Bean实例,当调用getBean时才会实例化Bean,每次getBean都会创建一个新的Bean实例

在原型中不会存入单例池中,因此每次getBean时产生一个新对象。

  • Bean的延时加载

当lazy-init设置为true时为延迟加载,也就是当Spring容器创建的时候,不会立即创建Bean实例,等待用到时在创建Bean实例并存储到单例池中去,后续在使用该Bean直接从单例池获取即可,本质上该Bean还是单例的。

  • Bean的初始化和销毁方法配置

Bean在被实例化后,可以执行指定的初始化方法完成一些初始化的操作,Bean在销毁之前也可以执行指定的销毁方法完成一些操作,初始化方法名称和销毁方法名称通过

这些方法都是在bean实例化以后(构造方法先执行),因此是该实例自己的方法。设置初始化和销毁的方法名称即可调用。销毁方法,当容器显示关闭时即可自动调用

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        UserSerice userSerice = (UserSerice) context.getBean("userSerice");
        context.close();
扩展:除此之外,我们还可以通过实现 nitializingBean 接口,完成一些Bean的初始化操作,如下

结果:afterPropertiesSet方法先于init-method方法执行。

  • Bean的实例化配置

Spring的实例化方式主要如下两种,也就是说beanFactory创建bean的两种方式,一个是反射,beanFactory内部使用工厂创建bean。

构造方式实例化:底层通过构造方法对Bean进行实例化。

<bean id="userSerice" class="cn.msf.service.impl.UserServiceImpl">
       <!--name是 有参构造中的输入,value是具体的值。-->
        <constructor-arg name="name" value="张三"></constructor-arg>
         <!--name  是impl中的set方法,ref 是bean的id-->
        <property name="userDao" ref="userDao"></property>
    </bean>

// 增加有参构造
    public UserServiceImpl(String name) {
        System.out.println("UserServiceImpl通过有参构造实例化。");
    }

工厂方式实例化:底层通过调用自定义的工厂方法对Bean进行实例化。

  • 静态工厂方法实例化bean:自定义工厂,创建静态方法,在静态方法内部产生bean

  • 实例工厂方法实例化bean:自定义工厂,创建实例方法,在实例方法内部产生bean

  • 实现factoryBean规范延迟实例化Bean

作用:在bean创建对象之前和之后,可以进行其他的逻辑操作;非我自定义的bean也可以用这个。

静态工厂方法实例化bean

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        UserSerice userSerice = (UserSerice) context.getBean("userSerice");
        UserDao userDao1 = (UserDao) context.getBean("userDao1");
        System.out.println("userDao1 = " + userDao1);

public class MyFactory1 {
    public static UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

<!--使用静态工厂创建userDao-->
    <bean id="userDao1" class="cn.msf.factory.MyFactory1" factory-method="getUserDao"></bean>

实例工厂方法实例化bean

由于是实例工厂,因此先要spring创建工厂对象,在创建后定义工厂对象和工厂方法创建bean对象。

实现factoryBean规范延迟实例化Bean

// 测试代码
  UserDao userDao3 = (UserDao) context.getBean("userDao3");
        System.out.println("userDao3 = " + userDao3);

public class MyFactory3 implements FactoryBean<UserDao> {
    @Override
    public UserDao getObject() throws Exception {
        return new UserDaoImpl();
    }

    @Override
    public Class<?> getObjectType() {
        return UserDao.class;
    }
}

    <!--使用自定义-->
    <bean id="userDao3" class="cn.msf.factory.MyFactory3"></bean>

结果,userDao3缓存在factoryBeanObjectsCache,也是延迟加载

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年全国最新消防设施操作员精选真题及答案

百分百题库提供消防设施操作员考试试题、消防设施操作员考试预测题、消防设施操作员考试真题、消防设施操作员证考试题库等,提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 1、对外观目测判断,下列哪种情况不应报废?(  ) A、铭牌标志脱落 B、瓶…

pyqt5加载matplotlib图形

matplotlib的图形处理非常强大。今天花了很长时间才将matplotlib图形嵌入到pyqt5中。在这里记录一下&#xff0c;便于以后查寻。有些可能还理解不到位。开始要导入几个模块&#xff1a;from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvasFigur…

tomcat下载和配置(简单,详细)

下载 官网&#xff1a;http://tomcat.apache.org/ 找到需要的版本&#xff0c;点击download 在download页面&#xff0c;选择需要下载的。&#xff08;分为压缩版和安装版&#xff0c;我比较推荐压缩版&#xff0c;省事解压缩就好&#xff09; 配置 首先&#xff01;&…

[ 数据结构 ] 集合覆盖问题(贪心算法)

0 集合覆盖问题 假设存在如下表的需要付费的广播台&#xff0c;以及广播台信号可以覆盖的地区。 如何选择最少的广播台&#xff0c;让所有的地区都可以接收到信号 广播台覆盖地区K1北京,上海,天津K2广州,北京,深圳K3成都,上海,杭州K4上海,天津K5杭州,大连 思路分析①:穷举法,…

LeetCode 64 最小路径和 | 解题思路分享

原题链接&#xff1a;64. 最小路径和 题目难度&#xff1a;中等 题目描述 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 **说明&#xff1a;**每次只能向下或者向右移动一步。 示例 1&…

Apache Spark + 海豚调度:PB 级数据调度挑战,教你如何构建高效离线工作流

2010年&#xff0c;我国进入移动互联网&#xff0c;数据规模成几何式增长。在大数据开源技术领域&#xff0c;以Hadoop为核心的大数据生态系统面对海量数据也不断发展与迭代&#xff0c;大数据处理流程中的各个开源组件&#xff0c;也一起开启了狂飙突进的大数据时代&#xff0…

MyBatis---初入

MyBatis快速入门 文章目录MyBatis快速入门MyBatisMyBatis开发步骤添加MyBatis的坐标创建user数据表编写user实体类编写映射文件UserMapper.xml编写核心文件SqlMapConfig.xml编写测试类MyBatis Mybatis是一个优秀的基于java的持久层框架&#xff0c;它内部封装了jdbc,使开发者只…

疫情放开后,如何保护居家员工的办公安全?

随着疫情的放开&#xff0c;大多数企业的员工因“阳”不得不在家办公。据当前的趋势来看&#xff0c;一线城市的大小企业已经出现高比例的员工感染&#xff0c;不少工作人员或出于安全的考虑选择居家办公。但无论是被迫居家隔离&#xff0c;还是主动远程办公&#xff0c;大多数…

Redis缓存何以一枝独秀?——从百变应用场景与热门面试题中感受下Redis的核心特性与使用注意点

大家好&#xff0c;又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容&#xff0c;将会通过系列专题&#xff0c;讲清楚缓存的方方面面。如果感兴趣&#xff0c;欢迎关注以获取后续更新。 作为《深入理解缓存原理与实战设计》系列专栏&#xff0c;在…

国产高清卫星影像时代来了,打造中国版“谷歌地球”!

随着国家数字化战略转型进程不断加快&#xff0c;卫星遥感影像作为基础数据&#xff0c;应用越来越广泛。目前已经成为资源环境调查、监测、评价和管理等不可或缺的技术手段。 不止于此&#xff0c;在推动行业发展、提高生产力以及节约成本等方面&#xff0c;卫星遥感影像都实…

【半监督医学图像分割 2022 CVPR】S4CVnet 论文翻译

【半监督医学图像分割 2022 CVPR】S4CVnet论文翻译 论文题目&#xff1a;When CNN Meet with ViT: Towards Semi-Supervised Learning for Multi-Class Medical Image Semantic Segmentation 中文题目&#xff1a;当CNN与ViT相遇:面向多类医学图像语义分割的半监督学习 论文链接…

kotlin必备基础一

kotlin 必备基础方法的声明成员方法类方法&#xff08;静态方法&#xff09;单表达式方法局部方法方法高级特性高阶函数函数作为参数函数作为返回值闭包&#xff08;Cloure&#xff09;闭包的特性闭包的好处解构申明匿名方法kotlin 方法字面值方法参数默认参数可变数量参数Lamb…

【机器学习】K近邻算法(K-NearestNeighbors , KNN)详解 + Java代码实现

文章目录一、KNN 基本介绍二、KNN 核心思想三、KNN 算法流程四、KNN 优缺点五、Java 代码实现 KNN六、KNN 改进策略一、KNN 基本介绍 邻近算法&#xff0c;或者说K最邻近&#xff08;KNN&#xff0c;K-NearestNeighbors&#xff09;分类算法是分类方法中最简单的方法之一。所谓…

Cadence PCB仿真使用Allegro PCB SI为分立元件创建统一的模型并赋值方法图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1,概述2,配置方法3,总结1,概述 本文简单介绍使用Allegro PCB SI软件配置电压地网络电压的方法。 2,配置方法 第1步:打开待仿真的PCB文件,并确认软件为Allegro PCB SI 如果,打开软件不是Allegro PCB SI则可这样…

[ 数据结构 ] 背包问题(动态规划)

0 背包问题 有一个背包,容量为4磅,现有如下物品 物品重量价格吉他(G)11500音响(S)43000电脑(L)32000 1)要求达到的目标为装入的背包的总价值最大&#xff0c;并且重量不超出 2)要求装入的物品不能重复(01背包) 1 动态规划 动态规划(Dynamic Programming)算法的核心思想是&…

从0到1完成一个Vue后台管理项目(十一、前端分页实现)

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…

测试分析--精准分析

测试分析的概念 测试分析是建立在对「需求本身」、「用户使用场景」以及对应的「系统架构」和「实现细节」的充分了解的基础上&#xff0c;通过对数据流、状态变化、逻辑时序、功能/性能/兼容性等方面的分析&#xff0c;得出测试点的过程&#xff1b; 在现阶段敏捷开发模式普遍…

【部分真题】2022年12月QMS质量管理体系试题(1-5题)尚大解析版

注1&#xff1a;由于是机考&#xff0c;题目顺序随机变化&#xff0c;但题目内容所有考生一致。 注2&#xff1a;选择题的选项顺序会随机改变&#xff0c;但选项的内容不变。 注3&#xff1a;为了方便学员学习与复习&#xff0c;已经按教程&考试大纲进行全面优化排序。 注4…

4644. 求和

4644. 求和 https://www.acwing.com/problem/content/description/4647/ 第十三届蓝桥杯省赛CA/C组 , 第十三届蓝桥杯省赛JAVAA组 算法标签&#xff1a;推公式&#xff1b;前缀和 思路 推公式做法&#xff1a; (a1a2a3...an)2a12a22a32...an22a1a22a1a3...2a1an2a2a3...2an−…

【模板】最小生成树(C++)

题目描述 如题&#xff0c;给出一个无向图&#xff0c;求出最小生成树&#xff0c;如果该图不连通&#xff0c;则输出 orz。 输入格式 第一行包含两个整数 N,MN,MN,M&#xff0c;表示该图共有 NNN 个结点和 MMM 条无向边。 接下来 MMM 行每行包含三个整数 Xi,Yi,ZiX_i,Y_i,…