Spring容器的控制反转(IOC)和依赖注入(DI)

一、spring的控制反转


1.什么叫spring的控制反转(Spring_IOC)?

简单通俗一点的说,就是把对象的创建,初始化,销毁等一系列工作交给spring去做,由spring控制对象的生命周期


二、Spring的依赖注入


1.什么叫spring的依赖注入(Spring_DI)?

给属性赋值的过程就叫做依赖注入,个人认为这一句话就可以把这个问题解释的很通透


2.spring依赖注入的方式

2.1设值注入
要给类里面的属性进行设值注入的一个前提就是,在类里面的属性必须要有setter方法,所谓的设值注入也就是通过setter方法进行注入
先看一个例子

public class Person {
    private String name;
    private Student student;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Student getStudent() {
        return student;
    }
    public void setStudent(Student student) {
        this.student = student;
    }
}

在spring的配置文件中的配置

<bean id = "student" class = "cn.ccx.student">
<bean id = "person" class = "cn.ccx.person">
    <property name = "name"  value = "张三"></property>
    <property name = "student"  ref= "student"></property>
</bean>

在这个例子里面,property 描述的是属性,name描述的是属性的名称,如果是基本类型(此处包括String),value就表示给属性赋值,如果是引用类型,就用ref进行赋值,这是最基本的给属性设值注入的过程

在这里提供一些其他的特殊的装配,也就是注入

装配list

`<property name="lists">
     <list>
         <value>list1</value>
         <value>list2</value>
         <ref bean="student"/><!--ref表示的是引用-->
     </list>
 </property>`

装配set

<property name="sets">
    <set>
        <value>set1</value>
        <value>set2</value>
        <ref bean="student"/><!--ref表示的是引用-->
    </set>
</property>

装配map

<property name="maps">
     <map>
          <entry key="01"><!--map里面的key必须是string类型-->
                  <value>map01</value>
          </entry>
          <entry key="02">
                  <value>map02</value>
          </entry>  
     </map>
</property>

装配properties

<property name="props">
    <props>
      <prop key="01">prop1</prop>
      <prop key="02">prop2</prop>
    </props>
</property>  

2.2.构造方法注入

public class Person {
    private String name;
    private Student student;
    public Person(String name, Student student) {
        this.name = name;
        this.student = student;
    }
}

spring的配置文件里面中

<bean id="student" class="cn.ccx.practice.Student"></bean>
<bean id="person" class="cn.ccx.practice.Person">
    <constructor-arg index="0" value="张三"   type="java.lang.String"></constructor-arg>
    <constructor-arg index="1" ref="student" type="cn.ccx.practice.Student"></constructor-arg>
</bean>

在这个例子里面,constructor-arg中的index表示的是构造方法里面的第几个参数,value表示的把基本类型的属性进行赋值,ref表示的是把引用类型进行赋值
当然,如果不存在constructor-arg的话,创建bean的实例对象就是调用的默认的无参的构造函数,如果存在,就相当于往构造参数里面传值,这时调用的就是其他的构造参数,type表示的是参数的类型


两种方法都各有优缺点,看个人习惯进行选择

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值