Spring IOC原理理解
今天花了一些时间去重新学习以前未好好掌握的内容,亡羊补牢,未为晚矣。
首先侧重看的便是spring IOC的原理,查询了很多资料后,在此写出自己的心得体会。
什么是IOC,IOC什么?
IOC(控制反转:Inverse of Control),现在也叫依赖注入,是Spring容器的内核,也可以说是spring能如此方便程序员编码的核心。
IOC即是利用了工厂模式将对象交给容器管理,通过容器的各种属性的相关操作来实现对对象的操作,所谓控制反转即是如此,控制:某个对象对另一个对象的控制权,反转:将该控制权交给容器来管理,容器决定谁控制谁。
举个简单的例子:A工人管理B工人,从代码角度看即定义了一个对象操作另一个对象,这两个对象都是事先定义好的,确定的,唯一的,但是我们知道在代码的角度,如果A有一天有事不能来上班了,那么我们定义的这个对象是不是便成了空指针了?但如果我们把控制权交给工厂来管理,工厂说A管理B那么A就是管理B,如果有天A不能来上班了,工厂可以立马指定C来管理B,对象不再是固定确定的,可以自由指定,这样是不是避免了空指针的错误呢。
IOC的类别
IOC有三种类别,1.构造方法注入,2.属性方法注入,3.接口方法注入。
1.构造方法注入
顾名思义,构造方法注入即是定义一个带参数的构造方法,由第三方传入构造方法的值,即上面所说的工厂指定一个值,例:
public class A{
private B b;
//①注入管理对象
public A(B b){
this.b = b;
}
public void manager(){
System.out.println("我被"+b+"管理了");
}
} `
public class Factory {
public void factory(){
//①工厂指定管理者
B b = new people();
//②注入具体管理者
A a = new A(b);
a.manager();
}
}
2.属性方法注入
属性方法注入就是我们常说的set方法,由第三方的set方法来定义具体的对象,这样避免了构造函数的全局使用弊端,使用set方法来替代构造函数注入,使我们能在想指定时指定,不必再每次都要向构造函数中传值才能使用对象。
例子:
public class A {
private B b;
//①属性注入方法
public void setB(B b) {
this.b= b;
}
public void manager() {
System.out.println("我被"+b+"管理了");
}
}
public class Factory{
public void factory(){
B b= new people();
A a= new A();
//①调用属性Setter方法注入
a.setB(b);
a.manager();
}
}
3.接口注入方法
所谓接口注入方法即是用接口类代替set方法,大家可以自己改写代码,接口注入方法与set方法并无多大区别,反而多定义了个接口类,并不好使用。
总结
spring的核心便是依赖注入,spring提供xml文件部署及注解的方式来实现依赖注入(推荐注解方式,减少配置量),想要学好spring的系列框架,搞懂其依赖注入原理是很有必要的。
理解有限,有很多不到位的地方请大家多多指教,也请各位大牛为小白指点指点。