依赖注入(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

<?xml version="1.0" encoding="UTF-8"?>  
  
<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-3.0.xsd">  

  <bean id="computer" class="com.atxx.demo.entity.Student">  

    <constructor-arg value="小罗"></constructor-arg>  

  </bean>  
    
</beans>

(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 version="1.0" encoding="UTF-8"?>  
  
<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-3.0.xsd">  
      

  <bean id="student" class="com.atxx.demo.entity.Student">  
    <property name="name" value="小罗"></property>  
   
  </bean>  
    
</beans>

在这个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才会按照类型来装配注入

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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值