昨天学的反射,今天学习依赖注入。控制反转 IOC:利用了反射机制
依赖注入 DI:是 IOC 的一种形式,使类与类之间解耦。在spring框架中有大量的实例。 IOC是所有框架最基本的特征,也是框架与普通类库的最大不同。
proxy模式
代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候找中介。
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容器的内核,其他功能都构建在此基础之上。某一接口的具体实现类的选择控制权从调用者手中移除,转交给了第三者控制。