• Spring之依赖注入



    前言

    依赖注入:
    依赖指的是对象和对象之间的关联关系
    注入指的是一种数据传递行为,通过注入的行为来让对象和对象产生关系
    依赖注入实现的两种方式:
    set注入
    构造方法注入


    一、set注入

    省略接口:

    1.1 UserDao类:

    package com.powernode.spring6.dao;
    
    public class UserDao {
        public void insertUser(){
            System.out.println("执行插入语句");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.2 UserService类:

    package com.powernode.spring6.service;
    
    import com.powernode.spring6.dao.UserDao;
    
    public class UserService {
        private UserDao userDao;
    
    	//这个set方法非常重要
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
        //set注入的话必须提供一个set方法
        //spring容器会调用这个set方法,来给userDao属性赋值
        public void saveUser(){
            userDao.insertUser();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    1.3 spring.xml配置文件:

    想让spring调用对应的set方法,需要配置property标签
    name属性的值:set方法的方法名去掉set后的一堆拿过来,第一个字母改为小写
    ref的值:ref后面指定的是要注入的bean的id

        <bean id="userDao" class="com.powernode.spring6.dao.UserDao">bean>
    
        <bean id="userService" class="com.powernode.spring6.service.UserService">
            
           
            <property name="userDao" ref="userDao">property>
        bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.4 测试类:

    @Test
        public void testFirstSpringCode2(){
            //第一步:获取spring容器对象
            //ApplicationContext翻译为应用上下文。其实就是spring容器
            //ApplicationContext是一个接口
            //ClassPathXmlApplicationContext 专门从类路径当中加载spring配置文件的对象
    
            //解析spring配置文件 启动了spring容器 并且实例化所有的bean对象
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
            //第二步:根据bean的id从spring容器中获取这个对象
            UserService userService = applicationContext.getBean("userService", UserService.class);
            userService.saveUser();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    1.5 执行结果:

    在这里插入图片描述
    执行成功!
    set注入的核心实现原理:通过反射机制调用set方法来给属性赋值,让两个对象之间产生关系

    二、构造方法注入

    核心原理:通过构造方法来给属性赋值

    2.1 UserDao

    public class UserDao {
    
        public void insertUser(){
            System.out.println("执行插入语句");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.2 UserService类:

    public class UserService {
        private UserDao userDao;
        //使用构造方法
        public UserService(UserDao userDao) {
            this.userDao = userDao;
        }
    
        //set注入的话必须提供一个set方法
        //spring容器会调用这个set方法,来给userDao属性赋值
        public void saveUser(){
            userDao.insertUser();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    1.3 spring.xml配置文件:

    构造方法注入:
    指定构造方法的第一个参数,下标是0
    可以不使用index 也可以根据参数的名字来配置

       <bean id="userDao" class="com.powernode.spring6.dao.UserDao">bean>
        <bean id="userService" class="com.powernode.spring6.service.UserService">
            
            <constructor-arg index="0" ref="userDao">constructor-arg>
        bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.4 测试类:

    @Test
        public void testFirstSpringCode2(){
            //第一步:获取spring容器对象
            //ApplicationContext翻译为应用上下文。其实就是spring容器
            //ApplicationContext是一个接口
            //ClassPathXmlApplicationContext 专门从类路径当中加载spring配置文件的对象
    
            //解析spring配置文件 启动了spring容器 并且实例化所有的bean对象
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
            //第二步:根据bean的id从spring容器中获取这个对象
            UserService userService = applicationContext.getBean("userService", UserService.class);
            userService.saveUser();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.5 执行结果

    在这里插入图片描述
    执行成功!


    总结

    set注入的核心实现原理:通过反射机制调用set方法来给属性赋值,让两个对象之间产生关系

  • 相关阅读:
    Vivado初体验LED工程
    CSS3 媒体查询
    Week 7 Learning Representation with Auto-Encoder(无监督学习)
    编程大杂烩(三)
    GitLab CI/CD之gitlab-ci.yml的介绍与简单编写(P3-P4)
    红队专题-从零开始VC++C/S远程控制软件RAT-MFC-远程控制软件总结
    阿里开源的低代码工具LowCodeEngine
    直方图均衡化
    实用篇-服务拆分及远程调用
    波动数列(蓝桥杯)
  • 原文地址:https://blog.csdn.net/qq_42338744/article/details/127823490