• DI的几种注入方式


    前言: 时间有限,课程赶得太紧,明天还要学习新的内容,这是我参考网上的教程,写的很粗糙,可能不便于阅读,后期再做完善吧┭┮﹏┭┮

    1.setter注入以及简单数据类型注入

    1.环境准备

    image-20221109221055860

    创建接口和实现类BookDao、BookDaoImpl、UserDao、UserDaoImpl、BookService、BookServiceImpl

    package com.hnu.dao;
    //先创建接口,然后创建实现类,最后在App类中引用实现
    public interface BookDao {
        public void save();
    }
    
    
    
    package com.hnu.dao.impl;
    import com.hnu.dao.BookDao;
    //实现接口
    public class BookDaoImpl implements BookDao {
        private String databaseName;
        private int connectionNum;
        public void setDatabaseName(String databaseName) {
            this.databaseName = databaseName;
        }
        public void setConnectionNum(int connectionNum) {
            this.connectionNum = connectionNum;
        }
        public void save() {
            System.out.println("book dao save " + databaseName + "  " + connectionNum);
        }
    }
    
    
    
    package com.hnu.dao;
    public interface UserDao {
        public void save();
    }
    
    
    
    
    package com.hnu.dao.impl;
    import com.hnu.dao.UserDao;
    public class UserDaoImpl implements UserDao {
        public void save() {
            System.out.println("user dao save ...");
        }
    }
    
    
    
    
    package com.hnu.service;
    public interface BookService {
        public void save();
    }
    
    
    
    
    
    
    package com.hnu.service.impl;
    import com.hnu.dao.BookDao;
    import com.hnu.dao.UserDao;
    import com.hnu.service.BookService;
    import org.springframework.beans.factory.DisposableBean;
    import org.springframework.beans.factory.InitializingBean;
    
    public class BookServiceImpl implements BookService {
        //在这个实现类中也可以创建bookDao接口的对象,在接口中是不能创建对象的,接口中存放的是方法
        private BookDao bookDao;
        private UserDao userDao;
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
        public void setBookDao(BookDao bookDao) {
            this.bookDao = bookDao;
        }
        public void save() {
            System.out.println("book service save ...");
            bookDao.save();
            userDao.save();
        }
    }
    
    • 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
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79

    2.声明属性并提供setter方法

    3.配置文件中进行注入配置

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="bookDao" class="com.hnu.dao.impl.BookDaoImpl">
            <!---注入简单数据类型->
            <property name="connectionNum" value="6"/>
            <property name="databaseName" value="pgsql"/>
        bean>
        <bean id="useDao" class="com.hnu.dao.impl.UserDaoImpl"/>
    
        <bean id="bookService" class="com.hnu.service.impl.BookServiceImpl">
            
            
            
            <property name="bookDao" ref="bookDao"/>
            <property name="userDao" ref="useDao"/>
        bean>
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4.运行程序

    AppForDISet

    package com.hnu;
    
    import com.hnu.service.BookService;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class AppForDISet {
        public static void main(String[] args) {
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            BookService bookService = (BookService)ctx.getBean("bookService");
            bookService.save();
            //ctx.close();
            ctx.registerShutdownHook();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    image-20221109221530442

    2.构造器注入引用数据类型和简单数据类型

    1.环境准备

    image-20221109222010084

    创建相应的接口和实现类BookDao、BookDaoImpl、UserDao、UserDaoImpl、BookService、BookServiceImpl

    package com.hnu.dao;
    //先创建接口,然后创建实现类,最后在App类中引用实现
    public interface BookDao {
        public void save();
    }
    
    
    
    
    package com.hnu.dao.impl;
    import com.hnu.dao.BookDao;
    //实现接口
    public class BookDaoImpl implements BookDao {
        private String databaseName;
        private int connectionNum;
    
        public BookDaoImpl(String databaseName, int connectionNum) {
            this.databaseName = databaseName;
            this.connectionNum = connectionNum;
        }
        public void save() {
            System.out.println("book dao save " + databaseName + "  " + connectionNum);
        }
    }
    
    
    
    
    package com.hnu.dao;
    public interface UserDao {
        public void save();
    }
    
    
    
    package com.hnu.dao.impl;
    import com.hnu.dao.UserDao;
    public class UserDaoImpl implements UserDao {
        public void save() {
            System.out.println("user dao save ...");
        }
    }
    
    
    
    
    package com.hnu.service;
    public interface BookService {
        public void save();
    }
    
    
    
    
    
    package com.hnu.service.impl;
    import com.hnu.dao.BookDao;
    import com.hnu.dao.UserDao;
    import com.hnu.service.BookService;
    import org.springframework.beans.factory.DisposableBean;
    import org.springframework.beans.factory.InitializingBean;
    public class BookServiceImpl implements BookService {
        //在这个实现类中也可以创建bookDao接口的对象,在接口中是不能创建对象的,接口中存放的是方法
        private BookDao bookDao;
        private UserDao userDao;
        public BookServiceImpl(BookDao bookDao, UserDao userDao) {
            this.bookDao = bookDao;
            this.userDao = userDao;
        }
        public void save() {
            System.out.println("book service save ...");
            bookDao.save();
            userDao.save();
        }
    }
    
    • 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
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    2.注入引用数据类型和简单数据类型

    3.配置文件中进行注入配置

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="bookDao" class="com.hnu.dao.impl.BookDaoImpl">
            
            
    
            
    
            
            
            <constructor-arg index="0" value="pgsql"/>
            <constructor-arg index="1" value="6"/>
        bean>
        <bean id="userDao" class="com.hnu.dao.impl.UserDaoImpl"/>
    
        
        
        <bean id="bookService" class="com.hnu.service.impl.BookServiceImpl">
            <constructor-arg name="bookDao" ref="bookDao"/>
            <constructor-arg name="userDao" ref="userDao"/>
        bean>
    
    beans>
    
    • 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

    4.运行程序

    AppForDIConstructor

    package com.hnu;
    
    import com.hnu.service.BookService;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class AppForDIConstructor {
        public static void main(String[] args) {
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            BookService bookService = (BookService)ctx.getBean("bookService");
            bookService.save();
            //ctx.close();
            ctx.registerShutdownHook();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    image-20221109222336882

    3.自动配置

    5.3.2 自动装配方式有哪些?

    • 按类型(常用)
    • 按名称
    • 按构造方法
    • 不启用自动装配

    1.准备环境

    image-20221109222733606

    创建接口和实现类BookDao、BookDaoImpl、UserDao、UserDaoImpl、BookService、BookServiceImpl

    package com.hnu.dao;
    
    //先创建接口,然后创建实现类,最后在App类中引用实现
    public interface BookDao {
        public void save();
    }
    
    
    
    
    
    
    package com.hnu.dao.impl;
    import com.hnu.dao.BookDao;
    //实现接口
    public class BookDaoImpl implements BookDao {
        private String databaseName;
        private int connectionNum;
    
        public BookDaoImpl(String databaseName, int connectionNum) {
            this.databaseName = databaseName;
            this.connectionNum = connectionNum;
        }
        public void setDatabaseName(String databaseName) {
            this.databaseName = databaseName;
        }
        public void setConnectionNum(int connectionNum) {
            this.connectionNum = connectionNum;
        }
        public void save() {
            System.out.println("book dao save " + databaseName + "  " + connectionNum);
        }
    }
    
    
    
    
    package com.hnu.dao;
    public interface UserDao {
        public void save();
    }
    
    
    
    
    
    package com.hnu.dao.impl;
    import com.hnu.dao.UserDao;
    public class UserDaoImpl implements UserDao {
        public void save() {
            System.out.println("user dao save ...");
        }
    }
    
    
    
    package com.hnu.service;
    public interface BookService {
        public void save();
    }
    
    
    
    
    package com.hnu.service.impl;
    import com.hnu.dao.BookDao;
    import com.hnu.dao.UserDao;
    import com.hnu.service.BookService;
    import org.springframework.beans.factory.DisposableBean;
    import org.springframework.beans.factory.InitializingBean;
    public class BookServiceImpl implements BookService {
        //在这个实现类中也可以创建bookDao接口的对象,在接口中是不能创建对象的,接口中存放的是方法
        private BookDao bookDao;
        public void setBookDao(BookDao bookDao) {
            this.bookDao = bookDao;
        }
        public void save() {
            System.out.println("book service save ...");
            bookDao.save();
        }
    }
    
    • 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
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    2.引用数据类型和简单数据类型的自动注入bytype

    3.完成自动配置的xml配置

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        
        
        <bean class="com.hnu.dao.impl.BookDaoImpl">
            <constructor-arg index="0" value="pgsql"/>
            <constructor-arg index="1" value="6"/>
        bean>
        <bean class="com.hnu.dao.impl.UserDaoImpl"/>
    
        <bean id="bookService" class="com.hnu.service.impl.BookServiceImpl" autowire="byType"/>
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3.运行程序

    AppForDIAutoSet

    package com.hnu;
    
    import com.hnu.service.BookService;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class AppForDIAutoSet {
        public static void main(String[] args) {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            BookService bookService = (BookService)ctx.getBean("bookService");
            bookService.save();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    运行结果:

    image-20221109223130776

    4.集合注入

    环境准备

    image-20221109223336304

    创建接口和实现类BookDao、BookDaoImpl

    package com.hnu.dao;
    //先创建接口,然后创建实现类,最后在App类中引用实现
    public interface BookDao {
        public void save();
    }
    
    
    
    
    
    package com.hnu.dao.impl;
    import com.hnu.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
    • 60

    2.引入spring依赖

    <dependencies>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-contextartifactId>
                <version>5.2.10.RELEASEversion>
            dependency>
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>4.12version>
                <scope>testscope>
            dependency>
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3.xml配置

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="bookDao" class="com.hnu.dao.impl.BookDaoImpl">
            <property name="array">
                
                <array>
                    <value>100value>
                    <value>200value>
                    <value>300value>
                array>
            property>
    
            <property name="list">
                
                <list>
                    <value>htuvalue>
                    <value>hnuvalue>
                    <value>mukewangvalue>
                    <value>bokeyuanvalue>
                list>
            property>
    
            <property name="set">
                
                <set>
                    <value>htuvalue>
                    <value>hnuvalue>
                    <value>mukewangvalue>
                    <value>bokeyuanvalue>
                set>
            property>
    
            <property name="map">
                
                <map>
                    <entry key="country" value="china"/>
                    <entry key="province" value="henan"/>
                    <entry key="city" value="kaifeng"/>
                map>
            property>
    
            <property name="properties">
                
                <props>
                    <prop key="country">chinaprop>
                    <prop key="province">henanprop>
                    <prop key="city">kaifengprop>
                props>
            property>
        bean>
    beans>
    
    • 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

    4.运行程序AppForDICollection

    package com.hnu;
    
    import com.hnu.dao.BookDao;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class AppForDICollection {
        public static void main(String[] args) {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            BookDao bookDao = (BookDao)ctx.getBean("bookDao");
            bookDao.save();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    运行结果:

    image-20221109224249737

  • 相关阅读:
    某大型房地产公司绩效面谈项目成功案例纪实
    day40-网络编程02
    第八章 强制类型转换
    基于AIOps实现智慧园区极简IT运维
    YOLOv5白皮书-第Y4周:common.py文件解读
    Java开源工具库使用之密码安全策略库passay
    根据内参调整图像大小
    渗透测试之安全手册(干货)
    LTC3307AHV 符合EMI标准,降压转换器 QCA7005-AL33 PHY
    java 算术运算符
  • 原文地址:https://blog.csdn.net/weixin_51470901/article/details/127779727