欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

beanFactory和ApplicationContext的区别和关系

程序员文章站 2022-05-24 12:01:00
...

ApplicationContext建立在BeanFactory的基础之上,提供了更多面向应用的功能, 它提供了国际化支持和框架事件体系,但有下面几点不同: 

1、获取beanFactory和ApplicationContext方式不同

//ApplicationContext
public class Test {

	public static void main(String[] args) {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
		Student stu = applicationContext.getBean(Student.class);
		System.out.println(stu.getName());
	}
}
//BeanFactory
public class Test {

	public static void main(String[] args) {
		
		Resource resource = new ClassPathResource("application.xml");
		BeanFactory beanFactory = new XmlBeanFactory(resource);
		Student stu = beanFactory.getBean(Student.class);
		System.out.println(stu.getName());
	}
}

2、都可以获取bean,获取bean存在的区别 

 ApplicationContext在创建容器时,创建对象采取的策略时采用立即加载的方式。也就是说,只要一读取完配置文件马上就创建配置文件中的配置对象。(单例对象适用

BeanFactory在构建核心容器时,创建对象采取的策略时采用延迟加载的方式。也就是说,什么时候根据id获取对象了,什么时候才真正创建对象。(多例对象适用

3、对BeanPostProcessor中的方法调用方式不同

若使用BeanFactory,则必须要显示的调用其addBeanPostProcessor()方法进行注册,参数为BeanPostProcessor实现类的实例,并进行手动调用。

如果是使用ApplicationContext,那么容器会在配置文件在中自动寻找实现了BeanPostProcessor接口的Bean,然后自动注册,我们要做的只是配置一个BeanPostProcessor实现类的Bean就可以了。