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

昨天学的反射,今天学习依赖注入。控制反转 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:依赖注入和控制反转)