• Spring 框架学习(五)---- 依赖注入


    Spring 框架学习(五)---- 依赖注入


    一、构造器注入


    在前几节已经做过了详细的说明讲解,我们先跳过


    二、set注入【重要】


    依赖注入

    • 依赖: bean对象的创建以及管理都依赖于Spring IOC容器

    • 注入: bean对象中的所有属性,都有容器进行注入

    在前面我们已经见识过了 普通类型注入和 bean注入的方式,那么对于复杂类型List、数组类型、Map、Set属性等怎么进行注入呢?

    我们先提供一个包含各种类型的实体类

    Student 类

    package com.kuang.pojo;
    
    import lombok.Getter;
    import lombok.Setter;
    import lombok.ToString;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    import java.util.Set;
    
    @Setter
    @Getter
    @ToString
    public class Student {
        private String name;
        private Address address;
        private String[] books;
        private List<String> hobbies;
        private Map<String,String> card;
        private Set<String> games;
        private String wife;
        private Properties info;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    Student类中包含的 Address类

    package com.kuang.pojo;
    import lombok.Getter;
    import lombok.Setter;
    import lombok.ToString;
    
    @Getter
    @Setter
    @ToString
    public class Address {
        private String address;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (1)基本类型注入

    
    <!--            普通类型注入-->
            <property name="name" value="张三"/>
    
    
    • 1
    • 2
    • 3
    • 4

    (2)引用类型(bean)注入

        <bean name="address" class="com.kuang.pojo.Address"/>
    
        <bean id="student" class="com.kuang.pojo.Student">
        
    <!--        引用类型(bean)注入-->
            <property name="address" ref="address"/>
            
        <bean/>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    (3)数组类型注入

    <!--         数组类型注入  -->
        
            <property name="books">
                
                <array>
                    <value>红楼梦</value>
                    <value>水浒传</value>
                    <value>西游记</value>
                    <value>三国演义</value>
                </array>
                
            </property>
            
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    property 嵌套 array标签 ,array标签中又 通过 value标签设置 数组中的值


    (4)List类型注入

    <!--Lits 属性注入-->
        
            <property name="hobbies">
                <list>
                    <value>打篮球</value>
                    <value>弹吉他</value>
                    <value>踢足球</value>
                </list>
            </property>
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    property 嵌套 list标签 ,list标签中又 通过 value标签设置 list中的值


    (5)null 空值注入

    <!--        null注入-->
            <property name="wife">
                <null/>
            </property>
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    property 嵌套 null标签,给指定属性设置为null


    (6)Map 类型注入

    <!--        Map注入-->
            <property name="card">
                <map>
                    <entry key="身份证" value="1111"/>
                    <entry key="饭卡" value="22222"/>
                </map>
            </property>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    property 嵌套 map标签 ,map标签中又 通过 entry标签设置 key、value中的值


    (7)Set 类型注入

    
    <!--        Set注入-->
            <property name="games">
                <set>
                    <value>塞尔达</value>
                    <value>马里奥</value>
                </set>
            </property>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    property 嵌套 set标签 ,set标签中又 通过value标签设置set中的值


    (8)Properties 类型注入

    
    
    <!--        properties注入-->
            <property name="info">
                <props>
                    <prop key="url">111</prop>
                    <prop key="username">root</prop>
                    <prop key="password">22222</prop>
                </props>
            </property>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    property 嵌套 props标签 , props标签中又 通过prop标签设置值


    查看注入之后的结果,正确拿到结果

    在这里插入图片描述


    三、其他方式注入


    (1)导入约束


    其他拓展的注入有p命名注入和c命名注入,但是不能直接使用都需要引入xml约束

    p命名空间注入xml约束

           xmlns:p="http://www.springframework.org/schema/p"
    
    • 1

    c命名空间xml约束

           xmlns:c="http://www.springframework.org/schema/c"
    
    • 1

    p命名和c命名是对注入方式的一种格式化

    • p命名对应着 property 属性注入

    • c命名对应着 construct-arg 构造参数注入


    (2)p命名注入

        <bean name="address" class="com.kuang.pojo.Address"/>
    
        <bean id="student"
              class="com.kuang.pojo.Student"
              p:name="张三"
              p:address-ref="address"
        />
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    (3)c命名注入

        <bean name="address" class="com.kuang.pojo.Address"/>
    
        <bean id="student"
              class="com.kuang.pojo.Student"
              c:name="张三"
              c:address-ref="address"
        />
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    Python语言_matplotlib包_共80种--全平台可用
    Vue(二)——Vue核心第二弹(未完成)
    详解机器视觉性能指标相关概念——混淆矩阵、IoU、ROC曲线、mAP等
    Axure基础详解二十一:动态面板随机抽奖效果
    如何快速走出网站沙盒期(关于优化百度SEO提升排名)
    互斥锁、条件变量、信号量以及适用场景
    CentOS 系统安装和使用Docker服务
    国际标准ISO/IEC 30144: 2020在智能变电站辅助监测中的应用研究
    一言不合就重构
    O(根号n/ln(根号n))时间复杂度内求n的所有因子
  • 原文地址:https://blog.csdn.net/rain67/article/details/125322137