目录
4.ApplicationContext和BeanFactory的区别
Spring的定义
我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽ 庞⼤的社区,这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景,它可以让 Java 企业级 的应⽤程序开发起来更简单。
用一句话概括:Spring是包含众多工具方法的IoC容器
什么是容器
容器是用来容纳某种物品的(基本)装置。
List/Map -> 数据存储容器 Tomcat -> Web 容器
什么是IoC
IoC = Inversion of Control 翻译成中⽂是“控制反转”的意思,
也就是说 Spring 是⼀个“控制反转”的容器,
IoC示例
我们现在构建⼀辆“车”的程序
1.传统程序开发:new多个对象。当最底层代码改动之后,整个调⽤链上的所有代码都需要修改。
2.控制反转式程序开发:
(1)定义一个Car类,调用framework对象的方法
public class Car {
private FrameWork frameWork;
public Car(FrameWork frameWork){
this.frameWork=frameWork;
}
public void init(){
System.out.println("Car");
frameWork.init();
}
}
(2)定义一个Framework类,调用bottom对象的方法
public class FrameWork {
private Bottom bottom;
public FrameWork(Bottom bottom){
this.bottom=bottom;
}
public void init(){
System.out.println("FrameWork");
bottom.init();
}
}
(3)定义一个Bottom类,调用Tire对象的方法
public class Bottom {
private Tire tire;
public Bottom(Tire tire){
this.tire=tire;
}
public void init(){
System.out.println("Bottom");
tire.init();
}
}
(4)定义一个Tire类
public class Tire {
private int size=17;
private String color="红色";
public Tire(int size,String color){
this.size=size;
this.color=color;
}
public void init(){
System.out.println("size -> "+size+"color -> "+color);
}
}
(5)Test类
public class Test {
public static void main(String[] args) {
Tire tire=new Tire(12,"黑色");
Bottom bottom=new Bottom(tire);
FrameWork frameWork=new FrameWork(bottom);
Car car=new Car(frameWork);
car.init();
}
}
变化:代码经过以上调整,⽆论底层类如何变化,整个调⽤链是不⽤做任何改变的,只需要Tire对象做出改变。这样就完成了代码之间的 解耦,从⽽实现了更加灵活、通⽤的程序设计了
Spring的核心功能
既然 Spring 是⼀个 IoC(控制反转)容器,重点还在“容器”⼆字上,那么它就具备两个最基础的功 能:
- 将对象存入容器
- 从容器中取出对象
DI的定义
DI 是 Dependency Injection 的缩写,翻译成中⽂是“依赖注入”的意思。
什么是依赖注入
所谓依赖注入,就是由 IoC 容器在运行期间,动态地将某种依赖关系注入到对象之中。
DI与IoC的区别
依赖注入(DI)和控制反转(IoC)是从不同的角度的描述的同⼀件事情
就是指通过引入 IoC 容 器,利⽤依赖关系注入的方式,实现对象之间的解耦。
IoC是一种思想,DI是具体的实现技术
Spring的创建和使用
1.创建Spring项目
1.1创建Maven项目
1.2配置Maven国内源
先将settings复制到.m2文件夹
(1)当前项目的配置
(2)新项目的配置
1.3添加Spring依赖
1.4重新下载jar
先删除所有的jar包,然后重新下载所有jar
1.5创建启动类
2.将Bean对象存储到Spring容器中
2.1创建一个Bean(Bean即对象)
2.2 将Bean存储到Spring容器中
3.从Spring中读取Bean
3.1得到Spring对象
3.2从Spring中获取Bean
3.3使用Bean
执行结果:
4.ApplicationContext和BeanFactory的区别
4.1ApplicationContext
将xml中所有的对象存储到Spring容器中,比较费内存,一次性加载,之后的读取会非常的快。
ApplicationContext的执行结果:
4.2 BeanFactory
只有调用getBean才会加载对应的Bean,节省内存,调用时才会加载对应的Bean,效率不高
BeanFactory的执行结果: