Spring核心IOC
spring 框架的优点:
- 解耦
- 简化开发
- 便于集成
核心原理:控制反转是思想,依赖注入是实现控制反转的具体方法
控制反转
正常代码,A类中需要使用B类对象进行一些操作时,需要以下代码:
public class A{
// 实例化一个B对象
B b = new B();
// 调用B中方法进行操作
b.methodInBClass();
}
这样的调用方式,称之为正转,也就是说:
由资源的使用类(A类),来控制资源类(B类)的实例化,进行资源的使用方式,被称为正转
这样的代码,耦合性会很高,当资源使用类需要使用大量的资源,并且资源和资源之间又存在相互依赖的关系时,你的代码可能会变成下面这样:
public class A{
H h = new H();
M m = new M();
F f = new F(h,m);
D d = new D();
G g = new G();
C c = new C(d,g,f);
// 实例化一个B对象,B对象的实例化依赖C,C又依赖于其他对象....
B b = new B(c);
b.methodInBClass();
}
明明是只想调用B类来完成一件事,但实际上大部分代码都在创建各种资源对象
下面就轮到spring出场了,只需要以下代码就可以完成上述代码同样的功能:
public class A{
@Autowired
private B b;
b.methodInBClass();
}
是不是一下子就变的简单,清楚明了了呢?
重点是:不需要A类来进行B类的实例化了,不用在A类中对B类对象的各种依赖进行创建和管理了,把资源的控制权由A类转移到了Spring容器中,这就是控制反转。
依赖注入
不通过 new() 的方式在类内部创建依赖类对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类使用。
依赖注入的方式:
- setter方法注入
- 构造方法注入