IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SSM学习——bean生命周期与依赖注入(3) -> 正文阅读

[Java知识库]SSM学习——bean生命周期与依赖注入(3)

使用标签配置

在dao层实现类里定义init初始化与destroy销毁操作
在这里插入图片描述

然后需要在xml里面注册
在这里插入图片描述

这时候其实只能输出init,(只调用了初始化方法,因为destroy的时候jvm已经被关闭了,spring来不及destroy,这时候需要把入口函数的类型改成ClassPathXmlApplicationContext,然后写上关闭容器的.close()方法)
在这里插入图片描述

其实还可以替代.close()这种暴力方法:设置一个钩子,让jvm退出之前记得让spring在钩子处关闭一下
在这里插入图片描述

.close() ctx.registerShutdownHook()的区别:.close()是暴力的,如果放在了getBean方法上面,那就相当于加载完xml后就关闭容器,不执行getBean及以下的方法了,就会报错,而钩子函数 ctx.registerShutdownHook()可以随时放哪都行

在这里插入图片描述

由于多个bean的初始化与销毁会显得比较乱,那么spring就给了我们一套规则,让我们按照他的方法写,就不用再配置了

使用接口配置(了解)

我们在bookService里面调用一下spring给我们的两个接口:
在这里插入图片描述
在这里插入图片描述

bean经历的阶段

在这里插入图片描述

依赖注入

在这里插入图片描述

对应的,依赖注入也就有4种类型:1,setter注入(简单类型,引用类型)2,构造器注入(简单类型,引用类型)

setter注入——引用类型

在这里插入图片描述

当我们需要在一个bean中传入多个类型时候,需要这么做:
在这里插入图片描述
在这里插入图片描述

在service里面整合了2个dao层的实现方法
在这里插入图片描述
可以看到结果按顺序执行了

在这里插入图片描述

setter注入——简单类型

有时候需要传入简单类型供web使用

在这里插入图片描述

然后我们尝试打印一下这两个简单数据类型
在这里插入图片描述

这时候,我们还需要去xml里面配置下他们的properties
在这里插入图片描述

构造器注入

构造器注入莫非就是在service里面写一个构造函数
在这里插入图片描述

然后再到xml里面配置:
在这里插入图片描述

多参数的也很简单:
在这里插入图片描述

在这里插入图片描述

简单类型的也很简单:
在这里插入图片描述

在这里插入图片描述

但是如果将bean里面的2个标签的顺序反过来了,那么就会报错!
在这里插入图片描述

不过,对于databaseName这样的名字,在xml里面和Dao层实现类里面都是一样的,这说明他们的耦合度还是很高,因此需要改进:将name改成type(参数类型)
在这里插入图片描述

但是这样的话无法解决两个数据类型同样的问题,怎么办?又有一个新方法,便是位置(index)
在这里插入图片描述

这些都是兼容性方案,为了松耦合

依赖自动装配

在这里插入图片描述

首先我们建立一个使用setter注入的代码
在这里插入图片描述

在这里插入图片描述

然后我们对xml进行改造

在这里插入图片描述

只要我们这儿提供了数据类型以及set方法那么就能够自动装配
在这里插入图片描述

然后再运行一遍程序,发现可用,说明我们不需要自己写<property>

但是有种情况:当我们有同类型的进行装配时,就无法按type进行匹配了,就只能用按名称进行匹配了

在这里插入图片描述

集合注入

既然泛型和基本数据类型都可以注入了,那么常见的集合怎么注入呢:
现在有 数组 List Set Map Properties

我们在dao层的实现类里面已经写好了

package com.itheima.dao.impl;

import com.itheima.dao.BookDao;

import java.util.*;

public class BookDaoImpl implements BookDao {

    private int[] array;

    private List<String> list;

    private Set<String> set;

    private Map<String,String> map;

    private Properties properties;




    public void setArray(int[] array) {
        this.array = array;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public void setSet(Set<String> set) {
        this.set = set;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }




    public void save() {
        System.out.println("book dao save ...");

        System.out.println("遍历数组:" + Arrays.toString(array));

        System.out.println("遍历List" + list);

        System.out.println("遍历Set" + set);

        System.out.println("遍历Map" + map);

        System.out.println("遍历Properties" + properties);
    }
}

现在xml也只是把这个实现类bean化了而已
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
在这里插入图片描述

现在,我们配置一下xml:

<property name="array">
            <array>
                <value>100</value>
                <value>200</value>
                <value>300</value>
            </array>
        </property>
        <property name="list">
            <list>
                <value>dwqod100</value>
                <value>eqw20ewe0ew</value>
                <value>30ewwew0</value>
            </list>
        </property>
        <!--        set自动去重,所以dikw会被过滤掉一个-->
        <property name="set">
            <set>
                <value>dwqop</value>
                <value>daw</value>
                <value>dikw</value>
                <value>dikw</value>
            </set>
        </property>
        <property name="map">
            <map>
                <entry key="country" value="CHN"/>
                <entry key="province" value="ZJG"/>
                <entry key="city" value="HZ"/>
            </map>
        </property>
        <property name="properties">
            <props>
                <prop key="country">CHN</prop>
                <prop key="province">ZJG</prop>
                <prop key="city">HZ</prop>
            </props>
        </property>

然后我们运行结果即可
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 18:50:24  更:2022-08-19 18:54:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:24:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码