• Spring | 依赖注入详解(DI)


    img

    个人主页BoBooY的CSDN博客_Java领域博主

    前言:上节我带大家快速上手了Spring,这一节我们讲解Spring中的依赖注入(DI),废话不多说,直接上正文!

    依赖注入(DI)

    4.1、概念

    • 依赖注入(Dependency Injection,DI)。
    • 依赖 : 指Bean对象的创建依赖于容器
    • 注入 : 指Bean对象的所有属性 , 由容器来注入(设置和装配) .

    4.2、构造器注入

    在上一节的IOC创建方式中进行了讲解:https://blog.csdn.net/qq_58233406/article/details/127244071

    4.3、Set方式注入【重点】

    4.3.1、环境搭建

    • 复杂类型

    Address.java

     public class Address {
     
         private String address;
     
         public String getAddress() {
             return address;
        }
     
         public void setAddress(String address) {
             this.address = address;
        }
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    Student.java

     package com.bby.pojo;
     
     import java.util.List;
     import java.util.Map;
     import java.util.Properties;
     import java.util.Set;
     
     public class Student {
     
         private String name;
         private Address address;
         private String[] books;
         private List<String> hobbys;
         private Map<String,String> card;
         private Set<String> games;
         private String wife;
         private Properties info;
     
         public void setName(String name) {
             this.name = name;
        }
     
         public void setAddress(Address address) {
             this.address = address;
        }
     
         public void setBooks(String[] books) {
             this.books = books;
        }
     
         public void setHobbys(List<String> hobbys) {
             this.hobbys = hobbys;
        }
     
         public void setCard(Map<String, String> card) {
             this.card = card;
        }
     
         public void setGames(Set<String> games) {
             this.games = games;
        }
     
         public void setWife(String wife) {
             this.wife = wife;
        }
     
         public void setInfo(Properties info) {
             this.info = info;
        }
     
         @Override
            public String toString() {
                return "Student{" +
                        "name='" + name + '\'' +
                        ", address=" + address +
                        ", books=" + Arrays.toString(books) +
                        ", hobbys=" + hobbys +
                        ", card=" + card +
                        ", games=" + games +
                        ", wife='" + wife + '\'' +
                        ", info=" + info +
                        '}';
            }
     }
    
    • 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
    • 60
    • 61
    • 62
    • 63
    • 64

    常量注入

    <bean id="student" class="com.bby.pojo.Student">
        <property name="name" value="啵啵鱼"/>
    bean>
    
    • 1
    • 2
    • 3

    测试

    public class StudentTest {
        @Test
        public void test(){
           ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
            Student student = (Student) context.getBean("student");
            System.out.println(student.getName());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.3.2、不同类型值的注入方式

    1、常量注入
    <bean id="student" class="com.bby.pojo.Student">
        <property name="name" value="啵啵鱼"/>
    bean>
    
    • 1
    • 2
    • 3
    2、Bean注入

    注意点:这里的值是一个引用,ref

     <bean id="addr" class="com.bby.pojo.Address">
         <property name="address" value="重庆"/>
     bean>
     
     <bean id="student" class="com.bby.pojo.Student">
         <property name="name" value="小明"/>
         <property name="address" ref="addr"/>
     bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    3、数组注入
     <bean id="student" class="com.bby.pojo.Student">
         <property name="name" value="小明"/>
         <property name="address" ref="addr"/>
         <property name="books">
             <array>
                 <value>西游记value>
                 <value>红楼梦value>
                 <value>水浒传value>
             array>
         property>
     bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    4、List注入
     <property name="hobbys">
         <list>
             <value>听歌value>
             <value>看电影value>
             <value>爬山value>
         list>
     property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    5、Map注入
     <property name="card">
         <map>
             <entry key="中国邮政" value="456456456465456"/>
             <entry key="建设" value="1456682255511"/>
         map>
     property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    6、set注入
     <property name="games">
         <set>
             <value>LOLvalue>
             <value>BOBvalue>
             <value>COCvalue>
         set>
     property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    7、Null注入
     <property name="wife"><null/>property>
    
    • 1
    8、Properties注入
     <property name="info">
         <props>
             <prop key="学号">20190604prop>
             <prop key="性别">prop>
             <prop key="姓名">小明prop>
         props>
     property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.3.3、P命名空间注入

    需要在头文件中加入约束文件

     导入约束 : xmlns:p="http://www.springframework.org/schema/p"
    
    • 1
    
    <bean id="user" class="com.bby.pojo.User" p:name="bobooy" p:age="18"/>
    
    • 1
    • 2

    4.3.4、c命名空间注入

    需要在头文件中加入约束文件

     导入约束 : xmlns:c="http://www.springframework.org/schema/c"
    
    • 1
     
     <bean id="user" class="com.bby.pojo.User" c:name="bobooy" c:age="18"/>
    
    • 1
    • 2

    注意:一定要写上带参构造

    解决:把有参构造器加上,这里也能知道,c 就是所谓的构造器注入!

    4.4、Bean的作用域

    ​ 在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象 .

    在这里插入图片描述

    4.4.1、单例模式(Spring默认机制)

    <bean id="user" class="com.bby.pojo.User" c:name="啵啵鱼" c:age="20" scope="singleton"/>
    
    • 1

    4.4.2、原型模式

    <bean id="accountService" class="com.something.DefaultAccountService" scope="prototype"/>
    
    • 1

    4.4.3、request、session、application

    request、session作用域仅在基于web的应用中使用(不必关心你所采用的是什么web应用框架),只能用在基于web的SpringApplicationContext环境。

    尾言:创作不易,如果本文的内容对您有帮助,还望客官可以三连支持一下博主,👍(点赞)+✏️(评论)+⭐️(收藏)是我创作的巨大动力!

    img

  • 相关阅读:
    MySQL之分布式事务
    qt 复杂界面信号槽设计
    Apache Shiro 组件反序列化漏洞分析
    微信小程序——数据绑定
    01科技文献
    单点登录方法
    [2023net毕业设计源码]精品基于NET实现的家电维修保养信息系统[包运行成功]
    CG-01 室外温湿度变送器
    数据库总结
    JS加密/解密之你是否真的明白xss
  • 原文地址:https://blog.csdn.net/qq_58233406/article/details/127266716