Spring:IOC和DI

Posted infancy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring:IOC和DI相关的知识,希望对你有一定的参考价值。

一、概述

  • IOC(Inversion of Controller):控制反转

    • “控制”指的是在我们的应用程序中创建对象的控制权

    • “反转”指的是原先在我们应用程序中创建对象都是我们手动去new一个对象,而现在我们将这个创建对象的权利交给spring容器。

  • DI(Dependency Injection):依赖注入

    • “依赖”指的是在我们应用程序的开发过程中,Person类中的age属性和name属性

    • “注入”指的是在创建Person类的过程中,Spring容器根据配置帮助我们将Person类中的age和name属性自动赋值

  • IOC和DI的区别和联系

    • IOC强调的是控制权力的转变,是一种编程思想

    • DI强调的是过程,spring帮我们管理对象的过程中,会帮我们把对象所依赖的属性什么的自动注入到对象中

    • 可以简单的说DI是基于IOC思想的实现

二、举个例子

  • 目前有一个“人”类,里面有age和name属性

  • package com.zhurouwangzi.entity;
    ?
    public class Person {
        //构造函数
        public Person(){
            System.out.println("Person被初始化了...");
        }
    ?
        public void sayHello(){
            System.out.println("Hello....."+"年龄:"+age+"    名字:"+name );
        }
    ?
        private int age;
        private String name;
    ?
        public int getAge() {
            return age;
        }
    ?
        public void setAge(int age) {
            this.age = age;
        }
    ?
        public String getName() {
            return name;
        }
    ?
        public void setName(String name) {
            this.name = name;
        }
    }

     

  • 这个时候我们想要使用Person对象,需要手动new一个Person对象,然后才能够使用

    • @Test
      public void test1(){
          Person p = new Person();
          p.setAge(18);
          p.setName("小明");
          p.sayHello();
      }

       

    • 技术图片

       

       

  • 使用Spring容器

    • 在applicationContext.xml文件中配置一个bean

    • <bean id="person" class="com.zhurouwangzi.entity.Person">
              <property name="age" value="18"></property>
              <property name="name" value="小明"></property>
      </bean>

       

    • 技术图片

       

       

    • @Test
      public void test2(){
          ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
          Person p = (Person)applicationContext.getBean("person");
          p.sayHello();
      }

       

    • 技术图片

       

  • 由上边的代码我们可以看出,不使用Spring,我们需要手动new一个Person对象,然后调用对象的set方法才能给对象的属性赋值;而使用Spring,在applicationContext.xml文件中配置好person这个bean对象,spring就会根据配置文件去帮我们创建和管理对象,还会帮我们把属性赋值;

以上是关于Spring:IOC和DI的主要内容,如果未能解决你的问题,请参考以下文章

Spring系统学习--1IOC和DI

阶段3 2.Spring_03.Spring的 IOC 和 DI_1 ioc的概念和作用

阶段3 2.Spring_03.Spring的 IOC 和 DI_3 spring基于XML的IOC环境搭建和入门

spring IOC(DI)实验

spring------控制反转(IOC)/依赖注入(DI)

简单手写Spring框架的IOC和DI源码