1. 从继承关系上来说,BeanFactory 是 的父类。BeanFactory 只是提供了基础操作Bean的方法,ApplicationContext除了拥有父类的基础操作之外,还提供了自己独有的功能。
2. 从性能方面上来说,ApplicationContext 是一次性加载并初始化所有的Bean对象,但是BeanFactory 是需要哪个Bean才去加载哪个Bean。
ApplicationContext 是在创建的时候就会将所有的bean初始化,第一次使用bean的时候快,启动比较慢,但是可能会造成资源浪费。BeanFactory不浪费任何资源,第一次加载bean比较慢。
import beans.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @program: first-spring
* @description: 通过ApplicationContext来获取对象
* @author: DRY
* @create: 2022-07-03 12:47
**/
public class App {
public static void main(String[] args) {
//1. 先得到上下文对象
ApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");
//2. 从spring上下文对象中获取bean
User user = (User)context.getBean("user");
//3. 使用对象(可以不使用)
user.sayHi("张丹");
}
}
import beans.User;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
/**
* @program: first-spring
* @description: 通过BeanFactory 来获取spring上下文对象
* @author: DRY
* @create: 2022-07-03 13:06
**/
public class App2 {
public static void main(String[] args) {
//1.先得到BeanFactory来获取对象
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
//2. 获取bean
User user = (User) beanFactory.getBean("user");
//3. 使用bean
user.sayHi("李四");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 表示将一个bean对象存储到spring中(可以有多个bean标签)-->
<bean id="user" class="beans.User"></bean>
</beans>
这两个user必须保持相同。