美文网首页
每日java--Day02:依赖注入和控制反转

每日java--Day02:依赖注入和控制反转

作者: 坏人_李哈哈 | 来源:发表于2019-08-28 23:37 被阅读0次

    昨天学的反射,今天学习依赖注入。控制反转 IOC:利用了反射机制
    依赖注入 DI:是 IOC 的一种形式,使类与类之间解耦。在spring框架中有大量的实例。 IOC是所有框架最基本的特征,也是框架与普通类库的最大不同。

    proxy模式

    代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候找中介。


    image.png
    public interface Sourceable {
        public void method();
    }
    
    public class Source implements Sourceable{
    
        @Override
        public void method() {
            System.out.println("the original method!");
        }
    }
    
    public class Proxy implements Sourceable{
         private Source source;
            public Proxy(){
                super();
                this.source = new Source();
            }
            @Override
            public void method() {
                before();
                source.method();
                atfer();
            }
            private void atfer() {
                System.out.println("after proxy!");
            }
            private void before() {
                System.out.println("before proxy!");
            }
    }
    

    测试类

    public class ProxyTest {
         public static void main(String[] args) {
                Sourceable source = new Proxy();
                source.method();
            }
    }
    

    输出:

    before proxy!
    the original method!
    after proxy!
    

    如果已有的方法在使用的时候需要对原有的方法进行改进,此时有两种办法:

    1、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。
    2、就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。

    依赖注入

    (Dependency Injection)是指将调用类接口实现类 的依赖关系由第三方注入,从而取消调用类对接口实现类的依赖。Spring使用DI来实现IoC功能。

    • 接口注入。在接口定义要注入的信息,并通过接口来完成注入。Spring不支持。
    • 设置注入。在要被注入的类中定义一个Setter()方法,并在参数中定义需要注入的对象。
    • 构造注入。在要被注入的类中声明一个构造方法,并在此方法的参数中定义要注入的对象

    设置注入和构造和构造注入的区别在与Spring实例化对象的顺序不同,即构造注入实例化所有依赖对象,然后实例化自己;而设置注入首先实例化自己,然后在实例化依赖对象。

    IoC

    (inverse of control ,控制反转),是spring容器的内核,其他功能都构建在此基础之上。某一接口的具体实现类的选择控制权从调用者手中移除,转交给了第三者控制。

    相关文章

      网友评论

          本文标题:每日java--Day02:依赖注入和控制反转

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