在了解Spring我们首先要知道什么是Spring
Spring是一个包含了众多的工具方法的容器.是一个轻量级的javaEE解决方案,而Spring的诞生就是为了解决企业应用开发的复杂性创建的.
Spring的核心时IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)
IOC和DI
IOC(控制反转):将创建对象的权力交与容器,对象的实例不再由调用者创建,而是由容器统一创建管理,控制权由应用代码转移到了容器.从而实现了控制反转,它同时也是Spring的核心思想之一.
通俗的理解就是:
假若此时你突然想吃一份羊肉面,你就需要买份羊肉 买面条.而这些过程是你主动进行的.也就是需要你自己主动创造.
随着时代的发展,现在你想吃的话,可以直接去饭馆里面.此时饭馆就相当于一个容器.
你并没有主动地去做饭,而是饭馆去做,甚至于比你做得更好.
如下图所示
public class Test {
public static void main(String[] args) {
Tire tire = new Tire(20);
Bottom bottom = new Bottom(tire);
Framework framework = new Framework(bottom);
Car car = new Car(framework);
car.init();
}
}
class Car {
private Framework framework;
public Car(Framework framework){
this.framework = framework;
}
public void init(){
System.out.println("do car");
framework.init();
}
}
class Framework {
private Bottom bottom;
public Framework(Bottom bottom){
this.bottom = bottom;
}
public void init(){
System.out.println("do framework");
bottom.init();
}
}
class Bottom {
private Tire tire;
public Bottom(Tire tire){
this.tire = tire;
}
public void init(){
System.out.println("do bottom");
tire.init();
}
}
public class Tire {
private int size = 12;
public Tire(int size){
this.size = size;
}
public void init(){
System.out.println("size -- >" + size);
}
}
在我们原来的代码中new对象时是由当前类所控制的而有了IOC后对象的管理权就由非当前类的IOC容器管理了.
DI(依赖注入):当一个java的实例创建另一个Java的实例时,创建被调用者的实例时不是由调用者实现的,而是由Spring容器实现后注入调用者.
IOC和DI的区别: 从上述介绍我们不难看出IOC和DI其实就是同一个概念的不同的实现而已.
都是实现对象的解耦.如果要说区别的话那就是IOC是一种设计思想.而DI则是一种具体的实现.
比如今天的天气好我想要出去跑步,这就是IO.
我想要去哪里跑,跑多久,就是DI.
AOP和OOP
OOP(面向对象的编程):对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加高效的逻辑单元划分。但是它也有缺点,那就是当具体关注点聚焦时,面向对象无法简单解决问题.因此延伸出了AOP.
AOP(面向切面编程):对业务处理过程中的切面进行提取,它是处理过程中的某个步骤或阶段.AOP是一种可以在不改变原来代码的基础上,通过“动态注入”代码,来改变原来执行结果的技术。
上述两种思想在目标上有着本质的差异,但要注意OOP和AOP并不是对立的,而是为了弥补OOP的不足,OOP解决了竖向的问题,AOP则解决横向的问题。因为有了AOP我们的调试和监控就变得简单清晰.