三、IOC容器(2)

news2024/12/29 10:41:35

四、IOC操作Bean管理(xml注入集合属性)

4.在集合里面设置对象类型值

①Course类

 ②Stu类

 ③配置xml文件

 ④测试

 5.把集合注入部分提取出来

  1. 在Spring配置文件中引入名称空间 util

        2.使用util标签完成list集合注入

①提取list集合类型的属性注入

<util:list id="bookList">
    <value>平凡的世界</value>
    <value>活着</value>
    <value>骆驼祥子</value>
</util:list>

②注入使用

<bean id="book" class="com.zhilei.spring5.Book">
    <property name="list" ref="bookList"></property>
</bean>

③测试

ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
Book book = context.getBean("book", Book.class);
System.out.println(book);

五、IOC操作Bean管理(工厂Bean)

1.Spring有两种类型的bean(普通bean和工厂bean)

2.普通bean:在配置文件定义的bean类型就是返回类型

 3. 工厂bean:在配置文件定义的bean类型可以和返回类型不同

 

①创建类,让这个类成为工厂bean,实现接口FactoryBean 

public class MyBean implements FactoryBean<Book> {

    @Override
    public Book getObject() throws Exception {
        return null;
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }

    @Override
    public boolean isSingleton() {
        return FactoryBean.super.isSingleton();
    }
}

②实现接口里面的方法,在实现方法中定义返回的bean类型

//1.定义的返回bean
@Override
public Book getObject() throws Exception {
    Book book = new Book();
    ArrayList<String> list = new ArrayList<>();
    list.add("语文");
    list.add("数学");
    book.setList(list);
    return book;
}

 ③测试

 六、IOC操作Bean管理(Bean的作用域)

1.在Spring里面设置bean实例是单实例还是多实例

2.在Spring里面,默认情况下是bean单实例(创建一个对象)

 3.设置单实例还是多实例

①在Spring配置文件bean标签里面属性scope设置

 ②scope="prototype"测试

 ③prototype和singleton的区别

        singleton表示单实例,prototype多实例

        设置是singleton,加载spring配置文件就会创建对象

ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");

       设置prototype时,加载配置文件不创建对象,当调用context.getBean()的时候才创建对象。

Book myBean = context.getBean("MyBean", Book.class);
Book myBean1 = context.getBean("MyBean", Book.class);

 七、IOC操作Bean管理(Bean的生命周期)

1.生命周期

①从对象的创建到对象销毁的过程

2.bean声明周期

  • 通过构造器创建bean实例(无参数构造)
  • 为bean的属性设置值和其他bean引用(调用set方法)
  • 调用bean的初始化的方法(需要配置)
  • Bean可以使用了,对象获取了
  • 当容器在关闭的时候,调用bean销毁的方法(需要配置

3.演示bean的生命周期

public class Orders {
    private String oname;
    public Orders() {
        System.out.println("1执行无参数构造器,创建bean实例");
    }
    public void setOname(String oname) {
        this.oname = oname;
        System.out.println("2.通过set方法设置属性值");
    }
    @Override
    public String toString() {
        return "Orders{" +
                "oname='" + oname + '\'' +
                '}';
    }
    //创建执行的初始化方法
    public void initMethod(){
        System.out.println("3执行初始化方法");
    }
    //销毁方法
    public void destroyMethod(){
        System.out.println("5销毁了");
    }
}

 配置xml文件

<bean id="orders" class="com.zhilei.spring5.bean.Orders" init-method="initMethod" destroy-method="destroyMethod">
    <property name="oname" value="手机"></property>
</bean>

 测试

@Test
    public void t1() {
//        加载spring的配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        Orders orders = context.getBean("orders", Orders.class);
        System.out.println("4对象获取");
        System.out.println(orders);

        //手动销毁
        ((ClassPathXmlApplicationContext)context).close();
    }

 

4.bean后置处理器 7步

  • 通过构造器创建bean实例(无参数构造)
  • 为bean的属性设置值和其他bean引用(调用set方法)
  • 把bean实例传递bean后置处理器的方法
  • 调用bean的初始化的方法(需要配置)
  • 把bean实例传递bean后置处理器的方法
  • Bean可以使用了,对象获取了
  • 当容器在关闭的时候,调用bean销毁的方法(需要配置)

5.演示bean后置处理器

创建类,实现接口BeanPostProcessor,创建后置处理器

public class MyBeanPost implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("在初始化之前执行的方法");
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("在初始化之后执行的方法");
        return bean;
    }

}

xml配置

<bean id="myBeanPost" class="com.zhilei.spring5.bean.MyBeanPost"></bean>

测试

 public void t1() {
//        加载spring的配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        Orders orders = context.getBean("orders", Orders.class);
        System.out.println("4对象获取");
        System.out.println(orders);

        //手动销毁
        ((ClassPathXmlApplicationContext)context).close();
    }

 八、IOC操作Bean管理(xml自动装配)

1.什么是自动装配

根据指定装配的规则(属性名称或属性类型),Spring自动匹配属性值进行注入

2.演示自动装配过程 byName根据属性名称注入,注入值bean得id值和类属性值一样

public class Dept {
    @Override
    public String toString() {
        return "Dept{}";
    }
}
public class Emp {
    private Dept dept;

    public void setDept(Dept dept) {
        this.dept = dept;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "dept=" + dept +
                '}';
    }

    public void test(){
        System.out.println(dept);
    }
}

 根据属性名称自动装配autowire="byName" byName根据属性名称注入,注入值bean得id值和类属性值一样

 测试

    @Test
    public void t1() {
//        加载spring的配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        Emp emp = context.getBean("emp", Emp.class);
        System.out.println(emp);
    }

 3. 演示自动装配过程 byType根据属性类型注入,相同类型的bean不能多个

<bean id="emp" class="com.zhilei.spring5.autowire.Emp" autowire="byType"></bean>
<bean id="dept" class="com.zhilei.spring5.autowire.Dept"></bean>

效果一样 

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

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

相关文章

如何调整碳化硅 MOSFET 驱动来减少功率损耗

如何调整碳化硅 MOSFET 驱动来减少功率损耗 1.如何减少传导损耗&#xff1f;2.如何减少开关损耗&#xff1f;2.1 关断损耗 (Eoff) 取决于 Rg 和 Vgs-off2.2 开通损耗 (Eon) vs. Rg2.3 开通损耗 Eon 和反向恢复损耗 Err 的米勒效应2.4 对驱动电流的要求 作者&#xff1a;Xiou 参…

销售/回收DSOS254A是德keysight MSOS254A混合信号示波器

Agilent DSOS254A、Keysight MSOS254A、 混合信号示波器&#xff0c;2.5 GHz&#xff0c;20 GSa/s&#xff0c;4 通道&#xff0c;16 数字通道。 ​Infiniium S 系列示波器 信号保真度方面树立新标杆 500 MHz 至 8 GHz 出色的信号完整性使您可以看到真实显示的信号&#xff1…

远程桌面连接不上解决方法

远程桌面连接是一种方便快捷的技术&#xff0c;可以让用户在不同的设备之间共享桌面和访问远程计算机。然而&#xff0c;有时候我们可能会遇到远程桌面连接无法正常连接的问题。在本篇文章中&#xff0c;我们将详细介绍远程桌面连接无法连接的常见原因&#xff0c;并提供相对应…

0601-指针的基础

内存 物理存储器和存储地址空间 物理存储器&#xff1a;实际存在的具体存储器芯片。比如&#xff1a;内存条、RAM芯片、ROM芯片。 存储地址空间&#xff1a;对存储器编码的范围。 编码&#xff1a;对每个物理存储单元&#xff08;一个字节&#xff09;分配一个号码寻址&…

520网络情人节:用双语告白你的女神男神!

网络情人节&#xff08;Network Valentines Day&#xff09;——520、521被喻为“我愿意、我爱你” 的意思&#xff0c;又被称为“结婚吉日”、“表白日”、“撒娇日”、“求爱节”。每年5月20日和5月21日的“网络情人节”也成为了情侣们扎堆登记结婚、隆重举办婚宴 的吉日。 5…

系统分析师经典易错题,解题思路一

数据库通常采用三级模式结构,其中,视图对应外模式,基本表对应模式,存储文件对应内模式。数据的独立性是由DBMS的二级映像功能来保证的。数据的独立性包括数据的物理独立性和数据逻辑独立性。数据的物理独立性是指当数据库的内模式发生改变时,数据的逻辑结构不变。为了保证…

HTML获取SpringBoot从model传的值

controller层如下&#xff1a; html获取格式&#xff1a;[[${传入的值}]] 效果图&#xff1a;

Mybatis操作数据库执行流程的先后顺序是怎样的?

MyBatis是一个支持普通SQL查询、存储及高级映射的持久层框架&#xff0c;它几乎消除了JDBC的冗余代码。使Java开发人员可以使用面向对象的编程思想来操作数据库。对于MyBatis的工作原理和操作流程的理解&#xff0c;我们先来看下面的工作流程图。 MaBatis的工作流程 在上图中…

VMware和Ubuntu20.04的安装

VMware安装&#xff1a; 1、下载好VM后右击管理员运行&#xff1a; PS&#xff1a;推荐大家去官网下载&#xff0c;如果需要许可密钥的话&#xff0c;可以去搜一下&#xff0c;或者私信一下UP&#xff0c;链接放下面了。 VM官网 因为我已经安装好了&#xff0c;所以就不在贴…

Appium自动化环境搭建保姆级教程

APP自动化测试运行环境比较复杂&#xff0c;稍微不注意安装就会失败。我见过不少朋友&#xff0c;装了1个星期&#xff0c;Appium 的运行环境还没有搭好的。 搭建环境本身不是一个有难度的工作&#xff0c;但是 Appium 安装过程中确实存在不少隐藏的比较深的坑&#xff0c;如果…

5.1图的物理结构与基本操作

1.图的物理结构 一.邻接矩阵存储稠密图 用于存储无向图&#xff0c;有向图&#xff0c;总之各类图 优缺点&#xff1a;适合存储稠密图&#xff0c;属于上下三角矩阵&#xff0c;有重复 复杂度&#xff1a;O(V),空间O(V^2) 性质&#xff1a;阶乘得到某一点的值&#xff0c;为顶…

C语言入门级小游戏——三子棋

文章目录 游戏文件的创建游戏菜单重头戏&#xff0c;游戏正式开始棋盘的创建数据清空打印棋盘 玩家下棋电脑下棋输赢的判断1.赢2.平局&#xff0c;游戏继续 代码展示 今天我们写一个小游戏——三子棋来增加我们对编程的兴趣&#xff0c; 希望这篇文章对友友们有帮助! 游戏文件的…

测试进阶-软件测试的分类

目录 按照测试对象划分界面测试 *可靠性测试如何进行可靠性测试 容错性测试文档测试兼容性测试 *易用性测试 *安装卸载测试 *安全测试性能测试内存泄漏测试 按照是否查看代码划分黑盒测试白盒测试灰盒测试 按照开发阶段划分测试金字塔单元测试集成测试系统测试回归测试冒烟测试…

行政前台快递管理软件使用教程

行政前台快递如何管理&#xff0c;是每个行政人员永远避不开的话题。 不管是从行政相关的论坛中&#xff0c;还是从身边从事行政相关工作的亲友口中&#xff0c;亦或是某些公司前台堆积的快递&#xff0c;我们都能看到、听到行政相关人员抱怨“行政前台快递管理为什么这么难”…

办公环境监测与智能控制软硬件全套解决方案

心理学研究表明&#xff0c;良好的工作环境对员工的身心健康及提高工作效率有积极影响。 不仅如此&#xff0c;近几年国家尤其提倡“碳中和”与“碳达峰”政策&#xff0c;并提出“节约能源、美化环境”的重要目标。以“企业数字化转型”为根本&#xff0c;一切事物都在朝着智能…

因子图优化

最大后验概率估计问题 我们常将状态估计问题建模为最大后验估计&#xff08;MAP&#xff09;。之所以命名为最大后验估计&#xff0c;是因为它在给定了观测 Z \bm Z Z的情况下&#xff0c;最大化状态 X \bm X X的后验概率密度 p ( X ∣ Z ) p(\bm X|\bm Z) p(X∣Z) X M A P …

迅为RK3568开发板驱动教程更新了兄弟们,思路更科学

驱动视频全新升级&#xff0c;并持续更新~更全&#xff0c;思路更科学&#xff0c;入门更简单。 迅为基于iTOP-RK3568开发板进行讲解&#xff0c;本次更新内容为第九期&#xff0c;主要讲解设备模型&#xff0c;共计29讲。 教程观看链接&#xff1a;B站搜索-迅为电子 课程目录…

Mysql——SUM()函数

目录 一、前期准备工作 新建表如下&#xff1a; 插入的数据如下&#xff1a; 二、SUM()函数的用法 1.求和&#xff0c;返回指定列的总和 SUM 函数可以对单个列求和&#xff0c;也可以对多个列运算后求和&#xff0c;计算中忽略 NULL 值 SUM函数与分组 GROUP BY 使用&a…

MySQL调优系列(五)——索引详解

一、索引的定义 数据库索引就像是书前面的目录&#xff0c;能加快数据库的查询速度。 索引是一种数据结构&#xff0c;用于帮助我们在大量数据中快速定位到我们想要查找的数据。 是一种帮助MySQL高效获取数据的数据结构。 ps&#xff1a;大多数情况下&#xff0c;索引查询都是…

计算机图形学 | 实验九:纹理贴图和天空盒

计算机图形学 | 实验九&#xff1a;纹理贴图和天空盒 计算机图形学 | 实验九&#xff1a;纹理贴图和天空盒实验概述顶点数据立方体顶点数据天空盒顶点数组 纹理载入创建纹理纹理读取纹理绑定 使用纹理立方体着色器顶点着色器片元着色器 天空盒着色器顶点着色器片元着色器 立方体…