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

spring-DI

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

spring-DI

1.什么是DI

2.依赖注入的类型和方式

3.使用spring注入数据

4.自动注入

5.使用注解完成IOC和DI功能

1.DI介绍

DI—Dependency Injection,即“依赖注入”:

组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到

组件之中。

Java Dependency Injection设计模式允许我们删除硬编码的依赖关系,并使我们的应用程序

松散耦合,可扩展和可维护。我们可以在Java中实现依赖注入,以将依赖解析从编译时移至运行

时。
        总之一句话:给对象中的属性赋值。

所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建

被调用者,而是依赖于外部的注入。Spring的依赖注入对调用者和被调用者几乎没有任何要求,完

全支持对POJO之间依赖关系的管理。

2.依赖注入的类型和方式

基本数据类型, 字符串类型,引用类型,集合类型。

- 通过构造方法注入     
- setter方法注入      
- 接口注入
3.使用spring-DI注入数据 3.1 基本数据类型(String,Interger)

(1)Student类

public class Student {
    private Integer age;
    private String name;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
        System.out.println("====调用了setAge====");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        System.out.println("====调用了setName====");
    }

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

(2)配置文件




    
        
        
    

(3)测试

public class Test01 {
    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("spring01.xml");
        Student stu01 = (Student) app.getBean("stu01");
        System.out.println(stu01);
    }
}
 3.2 注入类对象类型

 (1)StuClass类

public class StuClass {
    private Integer cid;
    private String cname;

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    @Override
    public String toString() {
        return "StuClass{" +
                "cid=" + cid +
                ", cname='" + cname + ''' +
                '}';
    }
}

(2)StuClass变为Student的属性,自动生成其set方法,修改toString(),输出

private Integer age;
private String name;
private StuClass sc;

 3.3 注入集合类型

 1、注入List集合类型

(1)将list集合添加为Student类属性

private Integer age;
private String name;
private StuClass sc;
private List hobby;

public void setHobby(List hobby){
        this.hobby =hobby;
    }

 (2)修改配置文件

 
        
        
        
        
            
                唱歌
                爬山
                游泳
            
        
 

2、注入Map集合类型

(1)添加类属性

private Integer age;
private String name;
private StuClass sc;
private List hobby;
private Map map;

@Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + ''' +
                ", hobby=" + hobby +
                ", sc=" + sc +
                ", map=" + map +
                '}';
    }

(2)配置文件


        
        
        
        
            
                唱歌
                爬山
                游泳
            
        
        
            
                
                
                
            
        
    

3 、注入set集合

(1)添加类属性

private Integer age;
private String name;
private StuClass sc;
private List hobby;
private Map map;
private Set set;

@Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + ''' +
                ", sc=" + sc +
                ", hobby=" + hobby +
                ", set=" + set +
                ", map=" + map +
                '}';
    }

(2) 配置文件


   
      abc
      abc
      bcd
      bcd
   

4.自动注入
public class UserController {

    private UserDao userDao;

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

    public void fun(){
        userDao.show();
    }
}
public interface UserDao {

    public void show();
}

public class UserDao01 implements UserDao {
    public void show() {
        System.out.println("userDao01-----how方法");
    }
}

public class UserDao02 implements UserDao{
    public void show() {
        System.out.println("userDao02=====show方法");
    }
}

 5.使用注解完成IOC和DI功能

(1)包扫描配置文件




    

(2)创建controller

@Controller
public class UserController {

    @Autowired
    @Qualifier(value = "user01")
    private UserDao ud;

    public void fun(){
        ud.show();
    }
}

(3)创建userdao及其实现类

public interface UserDao {
    public void show();
}

@Repository(value = "user01")
public class UserDao01 implements UserDao {
    public void show() {
        System.out.println("======userDao01=====");
    }
}

@Repository(value = "user02")
public class UserDao02 implements UserDao {
    public void show() {
        System.out.println("======userDao02=====");
    }
}

(4)测试

public class Test02 {
    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("user01.xml");
        UserController uc = (UserController) app.getBean("userController");
        uc.fun();
    }
}

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

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

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