本文章介绍了Spring大致是什么,核心的功能.
Spring是什么?
Spring指的是Spring Framework(Spring框架).
支持广大的开发场景,能够使应用开发变得简单.
其集成了各种工具,还实现了底层的类的实例化和生命周期的管理.
简单来说,Spring就是拥有众多工具方法的IoC容器
容器?
容器就是用来装载物品的工具.
List列表,Map图都是容器,可以用来装载一定的元素.
Tomcat也是容器的一种,主要用来装载web项目.
Spring也是容器的一种,其装载的是对象.
IoC?
IoC的全称为:Inversion of Control(控制反转).
这不是一种技术,只是一种设计的思想.
当我们在当前类A,调用其他类的方法时,通常是在A类中new一个B类的对象,并调用.可是当B类进行修改的时候,A类中的代码也要进行修改.就会导致耦合度过高的情况,这并不符合我们高内聚低耦合的思想.
Ioc思想是: 当A类想要调用B类的时候,不是在A类中new一个B的实例,而给A类传送一个B类的实例.当B类进行修改的时候,改的只是自身内部的属性.而给A传送的是一个整体,并不会对A进行影响.
情况一:
A类中的方法new一个实例B
java
public class B {
public void sayHi(){
System.out.println("HI");
}
}
public class A {
//需要调用B类
public void sayHi(){
B b = new B();
b.sayHi();
}
public static void main(String[] args) {
A a = new A();
a.sayHi();
}
}
可是当情况一中的B类自身发生改变的时候,例入加入了新的属性.
A类中就要相应的发生变化,当前只是一个属性的变化,如果B类一下子更改了很多,那么A类受的影响会更大.
java
public class B {
private int id;//发生变化
public B(int id){
this.id = id;
}
public void sayHi(){
System.out.println("HI");
}
}
public class A {
//需要调用B类
public void sayHi(int id){//此处需要加入参数,用来构造B
B b = new B(id);
b.sayHi();
}
public static void main(String[] args) {
A a = new A();
a.sayHi(10);
}
}
情况二:
将B类的实例传送给A类调用,而不是在A类中new
java
public class B {
public void sayHi(){
System.out.println("HI");
}
}
public class A {
//需要调用B类
public void sayHi(B b){
b.sayHi();
}
public static void main(String[] args) {
A a = new A();
B b = new B();
a.sayHi(b);
}
}
当B类自身发生变化的时候,A类也不会遭到影响
java
public class B {
private int id;
public B(int id){
this.id = id;
}
public void sayHi(){
System.out.println("HI");
}
}
public class A {
//需要调用B类
public static void sayHi(B b){
b.sayHi();
}
public static void main(String[] args) {
A a = new A();
B b = new B(10);
a.sayHi(b);
}
}
上面两种情况很好的解释了IoC中的控制翻转:
这里的控制,其实所指的是"对实例创建的控制".
在情况一下 ,对于B类来说,是在A类中被new出来的.B是被动的一方 ,A是主动的一方.B类自己并不能主导什么时候创建出实例,自己实例的创建的控制权在别人的手上
而在情况二下 ,B类的实例创建是自己能够控制的 ,在自己实例化之后再传输给A类.并不受A类的左右.主导了实例创建的控制权.
这就是IoC思想,控制翻转.达到了低耦合的美好结果.
Spring的核心功能
对于上述的内容,spring的总结为:是一个IoC容器,装载着对象.
作为容器来说,最重要是功能就是存储与取出.
Spring的核心功能也正是这两个,Spring能够帮助我们存储类的对象,当我们需要使用的时候能够将所需的对象取出.
Spring也正有着创建与销毁的权利才能帮助我们完成上述的功能.
当对象放在了Spring中,就像线程池一般.方便我们取出,使用完后再存储起来,而不是重新new一个对象出来,结束后便进行销毁.
IoC与DI
DI是Dependency Inection.依赖注入,将所依赖的对象进行注入到所需的类中.是spring框架的核心之一.
可以观察,上面的情况二.我们为了达成IOC控制权翻转,是在main中创建了B类的实例再传给A.
在一个项目中,如果为了实现IOC而一次性把所需要的类都手动进行实例化一遍显然是不现实的.
而在spring中,当我们指定了一些类后.spring能够自动的在我们所需的时候,自动帮我们所创建,来达到IOC的效果,这就是DI.