Spring
1.Spring是什么
Spring就是一个包含众多工具方法的IoC容器
1)什么是容器?
容器就是存储某种东西的基本装置,在Java的学习过程中,我们曾接触过很多容器,例如数据结构中的List,Map等是数据存储的容器,Tomcat就是web程序的容器
2)什么是IoC?
IoC(Inversion of Control)也就是控制反转的意思 那么也就是说spring是个控制反转的容器,但是这样说还是有点不好理解,我们可以理解为控制权转换了的对象的容器,那什么是控制转换,我们为什么要使用控制转换呢?举个例子,比方说我们要实现一个Car类,那么我们需要实现车身,车底盘,车轮胎,由上而下是一个层层递进,层层依赖的关系
按照上图的逻辑我们写出的代码是
class Car{
public void init(){
Body body = new Body();
body.init();
}
}
class Body{
public void init(){
Bottom bottom = new Bottom();
bottom.init();
}
}
class Bottom{
public void init(){
Tires tires = new Tires();
tires.setSize(??);
}
}
class Tires{
private int size;
public void setSize(int size){
this.size = size;
}
}
public class traditionalMethod {
public static void main(String[] args) {
Car car = new Car();
car.init();
}
}
当我们的业务需求是需要涉及不同尺寸的轮胎时,我们就需要层层调用直到底层的setSize,也就是我们需要在Bottom类中调用时需要传入??参数,但是由于我们每一个类都是在类自己内部new出自己的所需依赖,那么这个所需的依赖的控制权就相当于在我们手中,所有类中需要的参数都需要我们自己层层传输,我们在想要修改size时,就需要从顶层的car类中开始传入参数,一步一步的传到底层,这时我们需要修改涉及的代码就太多了,而且当代码的依赖逻辑更复杂时,或者需要给最底层的轮胎增删一些参数(例如增加颜色属性),我们需要更容易凌乱,出现这个问题的原因是上述代码耦合性太高了,我们不妨想,将new依赖对象这个操作交到外部,也就是将依赖对象的控制权交出去,当我们需要的时候直接拿对象来使用即可(也就是采用注入所需依赖对象的方法),那么这个时候就直接将依赖的对象当成了一个方法,当我们对所以来对象想要进行一些修改时,我们只需要在外部类创建时进行修改,然后在调用类中增删改参数即可,这时就完美的实现了程序的解耦合,用代码来实现就是
class Car2{
private Body2 body2;
public Car2(Body2 body2){
this.body2 = body2;
}
public void run(){
body2.init();
}
}
class Body2{
private Bottom2 bottom2;
public Body2(Bottom2 bottom2){
this.bottom2 = bottom2;
}
public void init(){
bottom2.init();
}
}
class Bottom2{
private Tires2 tires2;
public Bottom2(Tires2 tires2){
this.tires2 = tires2;
}
public void init(){
tires2.init();
}
}
class Tires2{
private int size;
public Tires2(int size){
this.size = size;
}