6 IoC/DI的理解

2019-03-05  本文已影响0人  See5170

1.概念

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

2.IoC的两种设计模式

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

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

3.DI的两种注入方式

3.1构造器注入

3.2 Setter注入

4.总结

5.课后

5.1什么是反射

5.2反射的用途

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

上一篇 下一篇

猜你喜欢

热点阅读