美文网首页
6 IoC/DI的理解

6 IoC/DI的理解

作者: See5170 | 来源:发表于2019-03-05 10:30 被阅读0次

1.概念

IOC(控制反转)是一种设计思想,旨在实现调用类和实现类的松耦合,调用类只依赖接口,在编译阶段并不知道具体使用哪个实现类,而是将这个控制权交给第三方容器,在运行时由容器将实例变量(具体的实现类)注入到对象中(调用类)。
DI(依赖注入)是具体的实现技术,是指由第三方组件负责将实例变量(实现类)传入到对象(调用类)中去。

2.IoC的两种设计模式

2.1 反射:在运行状态中,根据提供的类的路径或类名,通过反射来动态地获取该类所有属性的方法

2.2 工厂模式:把IoC容器当作一个工厂,在配置文件或注解中给出定义,然后利用反射技术,根据给出的类名生成相应的对象

3.DI的两种注入方式

3.1构造器注入

  • 构造器注入是在Bean构造过程中执行的

    image

3.2 Setter注入

  • Setter注入是在Bean示例创建完毕之后执行

    image

4.总结

  • Spring引入Autowire(自动装配)机制就是为了解决<bean>标签下<property>标签或<constructor-arg>标签过多的问题
  • 对于强依赖,可使用构造器注入,对于弱依赖,推荐使用Setter注入

5.课后

5.1什么是反射

  • JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制。
  • Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态语言的一个关键性质。
  • Java反射的功能是在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调用任意一个对象的方法,生成动态代理。

5.2反射的用途

  • 当我们在使用 IDE(如 Eclipse\IDEA)时,当我们输入一个队长或者类并向调用它的属性和方法时,一按 (“.”)点号,编译器就会自动列出她的属性或方法,这里就会用到反射。

5.3反射的实例

  • 获取对象的类型名称
public class Reflection HelloWorld {
    public static void main(String[] args){
        Foo f = newFoo();
        System.out.println(f.getClass().getName());        
    }
}

class Foo {
    publicvoid print() {
        System.out.println("abc");
    }
}

输出结果

myreflection.Foo

  • 调用未知对象的方法
public class Reflection HelloWorld {
    public static void main(String[] args){
        Foo f = newFoo();
        Method method;
        try{
            method = f.getClass().getMethod("print",newClass<?>[0]);
            method.invoke(f);
        }catch(Exception e) {
            e.printStackTrace();
        }          
    }
}

class Foo {
    public void print() {
        System.out.println("abc");
    }
}

输出结果

abc

  • 创建对象
public class Reflection HelloWorld {
    publi cstatic void main(String[] args){
        // 创建Class实例
        Class<?> c = null;
        try{
            c=Class.forName("myreflection.Foo");
        }catch(Exception e){
            e.printStackTrace();
        }

        // 创建Foo实例
        Foo f = null;

        try{
            f = (Foo) c.newInstance();
        }catch(Exception e) {
            e.printStackTrace();
        }  

        f.print();
    }
}

class Foo {
    public void print() {
        System.out.println("abc");
    }
}

输出结果

null
abc

相关文章

  • 6 IoC/DI的理解

    1.概念 IOC(控制反转)是一种设计思想,旨在实现调用类和实现类的松耦合,调用类只依赖接口,在编译阶段并不知道具...

  • 6 IoC/DI的理解

    1.概念 IOC(控制反转)是一种设计思想,旨在实现调用类和实现类的松耦合,调用类只依赖接口,在编译阶段并不知道具...

  • “王大锤の非诚勿扰” —— Spring IoC / DI 思想

    本文参考地址: 《spring Ioc/DI的理解》 《关于Spring IOC (DI-依赖注入)你需要知道的...

  • 揭开IOC/DI的神秘面纱【spring】

    讲IoC之前先说说DI。理解了DI再去理解IoC会变得相对简单一些。由于IoC的意义比较晦涩难懂,软件界的泰斗人物...

  • IoC/DI的理解

    1.概念 IOC(控制反转)是一种设计思想,旨在实现调用类和实现类的松耦合,调用类只依赖接口,在编译阶段并不知道具...

  • IOC/DI的理解

    1.IOC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想...

  • Spring IOC容器简介

    前言 Spring的核心是一个IOC(控制反转)容器,IOC的含义与DI(依赖注入)等同,但是DI显然更好理解,也...

  • day6IoC/DI的理解

    1.概念 IOC(控制反转)是一种设计思想,旨在实现调用类和实现类的松耦合,调用类只依赖接口,在编译阶段并不知道具...

  • Spring之初体验

    一、IoC和DI 1、IoC:Inverse of Control(控制反转):读作“反转控制”,更好理解,不是什...

  • Spring 常见的一些面试题整理

    IOC和DI是什么? Spring IOC 的理解,其初始化过程? BeanFactory 和 FactoryBe...

网友评论

      本文标题:6 IoC/DI的理解

      本文链接:https://www.haomeiwen.com/subject/djcnuqtx.html