栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring DI 依赖注入

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring DI 依赖注入

文章目录
  • Spring DI 依赖注入
    • 一、概述
    • 二、各种依赖注入环境准备
      • 1、环境准备(2~7修改applicationContext.xml配置文件)
        • 1.1、创建Maven项目
        • 1.2、创建Maven的Module
        • 1.3、导入jar包,配置pom.xml,并下载
        • 1.4、创建com.sgz.di.pojo包
        • 1.5、创建Student类
        • 1.6、创建Teacher类
        • 1.7、创建applicationContext.xml配置文件(修改2~7)
        • 1.8、创建com.sgz.di.text测试包
        • 1.9、创建text测试类
      • 2、setting注入
      • 3、构造器注入
      • 4、类类型的注入
        • 4.1、引用外部bean
        • 4.2、级联方式
        • 4.3、内部bean
      • 5、数组类型的注入
        • 5.1、字面量类型
        • 5.2、类类型
      • 6、List集合类型注入
        • 6.1、字面量类型
        • 6.2、类类型
        • 6.3、util:list标签
      • 7、Map集合类型注入
        • 7.1、字面量类型
        • 7.2、类类型
        • 7.3、util:map标签
      • 8、特殊值处理
        • 8.1、null
        • 8.2、特殊符号 <>
        • 8.3、CDATA节
    • 三、基于XML的自动装配 DI
      • 1、简介
      • 2、代码案例
        • 2.1、案例一(传统set注入+包扫描)
          • 2.1.1、创建Maven项目
          • 2.1.2、创建Maven的Module
          • 2.1.3、导入jar包,配置pom.xml,并下载
          • 2.1.4、创建com.sgz.di.pojo 包
          • 2.1.5、创建Boss类
          • 2.1.6、创建Staff类
          • 2.1.7、创建配置文件applicationContext.xml
          • 2.1.8、创建com.sgz.di.text测试包
          • 2.1.9、创建测试类TestDI
        • 2.2、案例二(配置bean)
          • 2.2.1、创建Maven项目
          • 2.2.2、创建Maven的Module
          • 2.2.3、导入jar包,配置pom.xml,并下载
          • 2.2.4、创建com.sgz.di...包,结构在下方图
          • 2.2.5、创建UserDao接口
          • 2.2.6、创建UserDaoImpl实现类
          • 2.2.7、创建UserService接口
          • 2.2.8、创建UserServiceImpl实现类
          • 2.2.9、创建UserController类
          • 2.2.10、创建配置文件applicationContext.xml
          • 2.2.11、创建com.sgz.di.text测试包
          • 2.2.12、创建测试类
    • 四、基于注解的自动装配 DI
      • 1、注解
      • 2、代码案例
        • 2.1、案例一(注解+包扫描)
          • 2.1.1、创建Maven项目
          • 2.1.2、创建Maven的Module
          • 2.1.3、导入jar包,配置pom.xml,并下载
          • 2.1.4、创建com.sgz.di.pojo 包
          • 2.1.5、创建Boss类
          • 2.1.6、创建Staff类
          • 2.1.7、创建配置文件applicationContext.xml
          • 2.1.8、创建com.sgz.di.text测试包
          • 2.1.9、创建测试类TestDI
        • 2.2、案例二(注解+包扫描)
          • 2.2.1、创建Maven项目
          • 2.2.2、创建Maven的Module
          • 2.2.3、导入jar包,配置pom.xml,并下载
          • 2.2.4、创建com.sgz.di...包,结构在下方图
          • 2.2.5、创建UserDao接口
          • 2.2.6、创建UserDaoImpl实现类
          • 2.2.7、创建UserService接口
          • 2.2.8、创建UserServiceImpl实现类
          • 2.2.9、创建UserController类
          • 2.2.10、创建配置文件applicationContext.xml
          • 2.2.11、创建com.sgz.di.text测试包
          • 2.2.12、创建测试类


Spring DI 依赖注入 一、概述
  • DI:Dependency Injection,依赖注入
  • DI配合IOC一起使用
  • DI就是为Spring所管理的属性进行赋值,如setter方法
  • 是指对象间的依赖关系,绑定两个类之间的关系,可以由框架来完成


二、各种依赖注入环境准备 1、环境准备(2~7修改applicationContext.xml配置文件) 1.1、创建Maven项目


1.2、创建Maven的Module



1.3、导入jar包,配置pom.xml,并下载
 
    
        
        
            org.springframework
            spring-context
            5.3.21
        
        
        
            junit
            junit
            4.13.2
        
    
1.4、创建com.sgz.di.pojo包

1.5、创建Student类
package com.sgz.di.pojo;

import java.util.Arrays;
import java.util.List;
import java.util.Map;


public class Student {

    private Integer id;
    private String name;
    private Integer age;
    private String gender;
    private Teacher teacher;    // 类类型
    private String[] strings;   // 数组类型,字面量类型
    private Teacher[] teachers; // 数组类型,类类型
    private List lists; // List集合类型,字面量类型
    private List teacherList;  // List集合类型,类类型
    private Map maps;   // Map集合类型,字面量类型
    private Map teacherMap;    // Map集合类型,类类型

    public Student() {
    }
    
    public Student(Integer id, String name, Integer age, String gender) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    
    public Student(Integer id, String name, Integer age, String gender, Teacher teacher, String[] strings, Teacher[] teachers, List lists, List teacherList, Map maps, Map teacherMap) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.teacher = teacher;
        this.strings = strings;
        this.teachers = teachers;
        this.lists = lists;
        this.teacherList = teacherList;
        this.maps = maps;
        this.teacherMap = teacherMap;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String[] getStrings() {
        return strings;
    }

    public void setStrings(String[] strings) {
        this.strings = strings;
    }

    public Teacher[] getTeachers() {
        return teachers;
    }

    public void setTeachers(Teacher[] teachers) {
        this.teachers = teachers;
    }

    public List getLists() {
        return lists;
    }

    public void setLists(List lists) {
        this.lists = lists;
    }

    public List getTeacherList() {
        return teacherList;
    }

    public void setTeacherList(List teacherList) {
        this.teacherList = teacherList;
    }

    public Map getMaps() {
        return maps;
    }

    public void setMaps(Map maps) {
        this.maps = maps;
    }

    public Map getTeacherMap() {
        return teacherMap;
    }

    public void setTeacherMap(Map teacherMap) {
        this.teacherMap = teacherMap;
    }

    public Teacher getTeacher() {
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", age=" + age +
                ", gender='" + gender + ''' +
                ", teacher=" + teacher +
                ", strings=" + Arrays.toString(strings) +
                ", teachers=" + Arrays.toString(teachers) +
                ", lists=" + lists +
                ", teacherList=" + teacherList +
                ", maps=" + maps +
                ", teacherMap=" + teacherMap +
                '}';
    }
}


1.6、创建Teacher类
package com.sgz.di.pojo;



public class Teacher {

    private Integer id;
    private String name;

    public Teacher() {
    }

    public Teacher(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "id=" + id +
                ", name='" + name + ''' +
                '}';
    }
}


1.7、创建applicationContext.xml配置文件(修改2~7)




1.8、创建com.sgz.di.text测试包

1.9、创建text测试类
package com.sgz.di.test;

import com.sgz.di.pojo.Student;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class TestDI{

    @Test
    public void testDI(){
        ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        Student student = (Student) ioc.getBean("student");
        System.out.println(student);
    }
}



2、setting注入



    
    
    
        
        
        
        
    



3、构造器注入


   
    
        
        
        
        
        
        
    



4、类类型的注入 4.1、引用外部bean



    
        
        
        
        
        
        
        
    

    
    
        
        
    


4.2、级联方式



    
    
        
        
        
        
        
        
        
        
    

    


4.3、内部bean



    
        
        
        
        
        
        
            
            
                
                
            
        
    




5、数组类型的注入 5.1、字面量类型



    
        
        
        
        
        
        
            
                
                吃
                喝
                玩
                乐
            
        
    


5.2、类类型



    
        
        
    

    
        
        
    

    
    
        
        
        
        
        
            
                
                
                
            
        
    




6、List集合类型注入 6.1、字面量类型



    
    
        
        
        
        
        
            
                
                唱歌
                直播
                化妆
            
        
    


6.2、类类型



    
        
        
    

    
        
        
    

    
    
        
        
        
        
        
            
                
                
                
            
        
    


6.3、util:list标签



    
        
        
    

    
        
        
    
    
    
    
        
        
    
    
    
        
        
        
        
        
    




7、Map集合类型注入 7.1、字面量类型


    
        
        
        
        
        
            
                
                
                
            
        
    

7.2、类类型


    
        
        
        
        
        
            
                
                
            
        
    

    
        
        
    

    
        
        
    

7.3、util:map标签


    
        
        
        
        
        
    

    
        
        
    

    
        
        
    

    
    
        
        
    



8、特殊值处理 8.1、null





   

8.2、特殊符号 <>

>">
8.3、CDATA节


   ]]>



三、基于XML的自动装配 DI 1、简介
  • 根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或接口类型属性赋值
  • bean的id唯一
2、代码案例 2.1、案例一(传统set注入+包扫描) 2.1.1、创建Maven项目


2.1.2、创建Maven的Module



2.1.3、导入jar包,配置pom.xml,并下载
 
    
        
        
            org.springframework
            spring-context
            5.3.21
        
        
        
            junit
            junit
            4.13.2
        
    
2.1.4、创建com.sgz.di.pojo 包

2.1.5、创建Boss类
package com.sgz.di.pojo;

import org.springframework.stereotype.Component;


@Component
public class Boss {

    String name = "我是老板";

    @Override
    public String toString() {
        return "Boss{" +
                "name='" + name + ''' +
                '}';
    }
}

2.1.6、创建Staff类
package com.sgz.di.pojo;

import org.springframework.stereotype.Component;


@Component
public class Staff {

    String name = "我是员工";
    // 1、绑定两个类间的关系,在一个类中定义另外一个类的变量
    private Boss boss;

    // 2、get / set 方法
    public Boss getBoss() {
        return boss;
    }

    public void setBoss(Boss boss) {
        this.boss = boss;
    }

    // 3、toString用来测试显示数据
    @Override
    public String toString() {
        return "Staff{" +
                "name='" + name + ''' +
                ", boss=" + boss +
                '}';
    }
}

2.1.7、创建配置文件applicationContext.xml



    


2.1.8、创建com.sgz.di.text测试包

2.1.9、创建测试类TestDI
package com.sgz.di.test;

import com.sgz.di.pojo.Boss;
import com.sgz.di.pojo.Staff;
import org.junit.Test;


public class TestDI {

    @Test
    public void test(){
        // Spring的DI传统实现(get,set)
        Boss boss = new Boss();
        System.out.println(boss);   // Boss{name='我是老板'}

        Staff staff = new Staff();  // Staff{name='我是员工', boss=null}
        System.out.println(staff);

        // DI:把两个对象间的关系依赖注入,实现DI
        staff.setBoss(boss);
        System.out.println(staff);  // Staff{name='我是员工', boss=Boss{name='我是老板'}}
    }

}

2.2、案例二(配置bean) 2.2.1、创建Maven项目


2.2.2、创建Maven的Module



2.2.3、导入jar包,配置pom.xml,并下载
 
    
        
        
            org.springframework
            spring-context
            5.3.21
        
        
        
            junit
            junit
            4.13.2
        
    
2.2.4、创建com.sgz.di…包,结构在下方图


2.2.5、创建UserDao接口
package com.sgz.di.dao;


public interface UserDao {

    void VIPUser();
}

2.2.6、创建UserDaoImpl实现类
package com.sgz.di.dao.impl;

import com.sgz.di.dao.UserDao;


public class UserDaoImpl implements UserDao {
    @Override
    public void VIPUser() {
        System.out.println("我是VIP用户");
    }
}

2.2.7、创建UserService接口
package com.sgz.di.service;


public interface UserService {
    void VIPUser();

}

2.2.8、创建UserServiceImpl实现类
package com.sgz.di.service.impl;

import com.sgz.di.dao.UserDao;
import com.sgz.di.service.UserService;


public class UserServiceImpl implements UserService {

    // 绑定两个类间的关系,在一个类中定义另外一个类的变量
    private UserDao userDao;

    // set get
    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void VIPUser() {
        userDao.VIPUser();
    }
}

2.2.9、创建UserController类
package com.sgz.di.controller;

import com.sgz.di.service.UserService;
import org.springframework.stereotype.Controller;


public class UserController {

    // 绑定两个类间的关系,在一个类中定义另外一个类的变量
    private UserService userService;

    // set get
    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public void VIPUser(){
        userService.VIPUser();
    }
}

2.2.10、创建配置文件applicationContext.xml


    

        
    

    
        
    

    


2.2.11、创建com.sgz.di.text测试包

2.2.12、创建测试类
package com.sgz.di.test;

import com.sgz.di.controller.UserController;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class TestDIXML {

    @Test
    public void test(){
        ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserController controller = ioc.getBean(UserController.class);
        controller.VIPUser();
    }
}



四、基于注解的自动装配 DI 1、注解
  • @Autowired:自动装配,Spring中DI注解,想用哪个类的功能就 DI 过来(get / set),使用前必须加上IOC四个注解之一
    • 在成员变量上,此时不需要设置成员变量的set方法(常用)
    • 在set方法上
    • 为当前成员变量赋值的有参构造上
2、代码案例 2.1、案例一(注解+包扫描) 2.1.1、创建Maven项目


2.1.2、创建Maven的Module



2.1.3、导入jar包,配置pom.xml,并下载
 
    
        
        
            org.springframework
            spring-context
            5.3.21
        
        
        
            junit
            junit
            4.13.2
        
    
2.1.4、创建com.sgz.di.pojo 包

2.1.5、创建Boss类
package com.sgz.di.pojo;

import org.springframework.stereotype.Component;


@Component
public class Boss {

    String name = "我是老板";

    @Override
    public String toString() {
        return "Boss{" +
                "name='" + name + ''' +
                '}';
    }
}

2.1.6、创建Staff类
package com.sgz.di.pojo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


@Component
public class Staff {

    String name = "我是员工";
    // 1、绑定两个类间的关系,在一个类中定义另外一个类的变量
    
    @Autowired
    private Boss boss;

    @Override
    public String toString() {
        return "Staff{" +
                "name='" + name + ''' +
                ", boss=" + boss +
                '}';
    }
}

2.1.7、创建配置文件applicationContext.xml



    


2.1.8、创建com.sgz.di.text测试包

2.1.9、创建测试类TestDI
package com.sgz.di.test;

import com.sgz.di.pojo.Boss;
import com.sgz.di.pojo.Staff;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class TestDI {

    @Test
    public void test(){
        // 1、读取配置文件
        ClassPathXmlApplicationContext spring = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 2、Spring的DI注解实现
        Staff staff = (Staff) spring.getBean("staff");
        System.out.println(staff);

    }

}

2.2、案例二(注解+包扫描) 2.2.1、创建Maven项目


2.2.2、创建Maven的Module



2.2.3、导入jar包,配置pom.xml,并下载
 
    
        
        
            org.springframework
            spring-context
            5.3.21
        
        
        
            junit
            junit
            4.13.2
        
    
2.2.4、创建com.sgz.di…包,结构在下方图


2.2.5、创建UserDao接口
package com.sgz.di.dao;


public interface UserDao {

    void VIPUser();
}

2.2.6、创建UserDaoImpl实现类
package com.sgz.di.dao.impl;

import com.sgz.di.dao.UserDao;
import org.springframework.stereotype.Repository;


@Repository
public class UserDaoImpl implements UserDao {
    @Override
    public void VIPUser() {
        System.out.println("我是VIP用户");
    }
}

2.2.7、创建UserService接口
package com.sgz.di.service;


public interface UserService {
    void VIPUser();

}

2.2.8、创建UserServiceImpl实现类
package com.sgz.di.service.impl;

import com.sgz.di.dao.UserDao;
import com.sgz.di.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service
public class UserServiceImpl implements UserService {

    // 绑定两个类间的关系,在一个类中定义另外一个类的变量
    @Autowired
    private UserDao userDao;

    @Override
    public void VIPUser() {
        userDao.VIPUser();
    }
}

2.2.9、创建UserController类
package com.sgz.di.controller;

import com.sgz.di.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;


@Controller
public class UserController {

    // 绑定两个类间的关系,在一个类中定义另外一个类的变量
    @Autowired
    private UserService userService;

    public void VIPUser(){
        userService.VIPUser();
    }
}

2.2.10、创建配置文件applicationContext.xml



    


2.2.11、创建com.sgz.di.text测试包

2.2.12、创建测试类
package com.sgz.di.test;

import com.sgz.di.controller.UserController;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class TestDIXML {

    @Test
    public void test(){
        ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserController controller = (UserController) ioc.getBean("userController");
        controller.VIPUser();
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1036298.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号