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

依赖注入(DI)和控制反转(IOC)的关系及简述

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

依赖注入(DI)和控制反转(IOC)的关系及简述

1.关系:

        依赖注入是控制反转的基础

2.控制反转(IOC):

简写自Inversion of Control,那么,何为反转?在以前,对象的创建由自己把控(通过new()方式),使用完之后也是自己去销毁,这样就导致对象始终会与其他类耦合在一起;那么现在,有了Spring IOC,一个专门帮我们创建对象的容器,当我们需要某个对象时,不再需要自己动手去创建,而只需要告诉Spring IOC容器:我需要创建xxx对象,然后Spring就会帮我们创建好。组件对象的控制权由程序代码本身转移到了外部容器------这就是所谓的反转。

如何实现反转呢?这就要要说到依赖注入了。

3.依赖注入(DI)

简写自 Dependency Injection。依赖注入具体是怎么实现的呢,我所学习到的有这么三种方式:

(1)构造器注入

顾名思义,就是通过构造器方法来实现依赖的注入,想要完成注入,我们还要配置xml文件,当然光靠说可能还无法理解,真要搞懂还得靠代码:

package com.atxx.demo.entity;

public class Student{
    private String name;


    public Student(String name){
        
        this.name=name;

}

}

然后,我们在xml里面配置这个bean

  
  
  

    

      

    
    

(2)属性注入/setter注入

通过setter方式注入我们需要在实体类中写出属性的setter()方法

package com.atxx.demo.entity;


public class Student {

private String name;

public void setName(String name){

    this.name=name;
}

public String getName(){

    return name;
}



}

添加setter方法之后,要再xml配置文件中声明 

  
  
  
      

    
      
   
    
    

在这个xml文件中,我们相当于给实体类的属性赋了值,通过给property的name属性赋值,Spring就会通过id所对应类中的set方法,给类中属性赋值。这样我们就完成了属性注入。

(3)自动装配

使用注解

package com.atxx.demo.entity;  
  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Component;  
  
@Component  
public class Student{  
      
    @Autowired  
    private String name;  

  
}  

          1.面使用的是@Autowired,在使用@Autowired注解之前需要在Spring配置文件进行配置,即手动配置了bean或者在类上添加了@Component注解。                

        2.@Autowired可以配合@Qualifier使用,使用注解@Qualifier可以指定要装配组件的id

          3.另外,关于@Autowired,我们要清楚:@Autowired默认使用byType来装配属性,如果匹配到类型的多个实例,再通过byName来确定bean,自动装配如果找不到组件就会报NoSuchBeanDefinitionException,如果要允许null 值,可以使用@Autowired(required=false),来指定一个不存在的组件

        也可以只用@Resource来完成自动装配,它默认按名称装配,只有当找不到与名称匹配的bean才会按照类型来装配注入

希望本文能对你有所帮助,如果有大佬发现有错误,还希望帮我指出来!我即使纠正;或者有朋友能够补充的也可以提出来,大家一起学习,一起进步!

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

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

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