• 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方法那么就能够自动装配
    在这里插入图片描述

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

    但是有种情况:当我们有同类型的进行装配时,就无法按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);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    现在xml也只是把这个实现类bean化了而已

    在这里插入图片描述

    现在,我们配置一下xml:

    <property name="array">
                <array>
                    <value>100value>
                    <value>200value>
                    <value>300value>
                array>
            property>
            <property name="list">
                <list>
                    <value>dwqod100value>
                    <value>eqw20ewe0ewvalue>
                    <value>30ewwew0value>
                list>
            property>
            
            <property name="set">
                <set>
                    <value>dwqopvalue>
                    <value>dawvalue>
                    <value>dikwvalue>
                    <value>dikwvalue>
                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">CHNprop>
                    <prop key="province">ZJGprop>
                    <prop key="city">HZprop>
                props>
            property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

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

  • 相关阅读:
    如何比较两个或多个分布:从可视化到统计检验的方法总结
    Linux内存管理(十六):buddy 系统分配器之页面释放
    8月算法训练------第九天(搜索与回溯)解题报告
    掌握Pytorch模型 压缩 裁剪与量化
    第2-3-6章 打包批量下载附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss
    【学习笔记】 - 基础数据结构 :Link-Cut Tree(进阶篇)
    Spring MVC 十一:@EnableWebMvc
    拍照扫描怎么弄?你可以试一下这两个方法
    Chrome开发者工具详解
    博客系统自动化测试
  • 原文地址:https://blog.csdn.net/qq_52480906/article/details/126363992