✏️作者:银河罐头
📋系列专栏:JavaEE
🌲“种一棵树最好的时间是十年前,其次是现在”
目录
- ApplicationContext 和 BeanFactory 的区别
ApplicationContext 和 BeanFactory 的区别
那么这 2 种获取 Spring 上下文对象的方式有什么区别?
ApplicationContext:
public class Student {
public Student(){
System.out.println("do student init");
}
public void sayHi(){
System.out.println("hi student");
}
}
public class Teacher {
public Teacher() {
System.out.println("do teacher init");
}
public void sayHi(){
System.out.println("hi teacher");
}
}
<bean id="student" class="com.spring.demo.Student"></bean>
<bean id="teacher" class="com.spring.demo.Teacher"></bean>
public class App {
public static void main(String[] args) {
//1.获取 Spring 对象
ApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");
//2.从 spring 容器中获取到 Bean 对象
Student student = (Student) context.getBean("student");
//3.使用 Bean (非必须)
student.sayHi();
}
}
BeanFactory:
区别:
-
ApplicationContext :在获取到 spring 上下文对象之后就会把 xml 里所有的 对象初始化加载到 spring 中。
-
BeanFactory :懒加载,在执行完 getBean() 之后,才会把 xml 中对应的 Bean 对象初始化加载到 spring 中。
性能角度:ApplicationContext 费内存,一次性加载,后续读取非常快。BeanFactory节省内存,调用时才会把 Bean 初始化加载到 Spring 中,效率不高。
继承角度:BeanFactory 是 ApplicationContext 的父类。
功能角度: BeanFactory 和 ApplicationContext 是 Spring 的 2 个顶级的接口,BeanFactory 有基础功能访问容器,而 ApplicationContext 继承了 BeanFactory,除了有 BeanFactory 的功能之外,还扩展了其他的功能,比如国际化支持,资源访问支持,事件传播支持。