ApplicationContext和BeanFactory有什么区别?

ApplicationContext和BeanFactory都可以获得Spring上下文对象,就像下面的代码那样:

  • 用ApplicationContext获取Spring上下文对象
import com.bite.demo.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public  static  void  main(String args[]){
        // 1.先得到spring 的上下文对象
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
        //  2.得到bean
     UserService userService=(UserService)context.getBean("user");
     userService.sayHi();
    }
}

  • 用BeanFactory获取Spring上下文对象
package com.bite.demo;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class App2 {
    public static void main(String  args[]){
         // 1.得到spring的上下文对象
        BeanFactory beanFactory=new XmlBeanFactory( new ClassPathResource("spring-config.xml"));
       UserService userService=(UserService)beanFactory.getBean("user");
               userService.sayHi();
    }
}

那么他们有什么相同点和区别呢?
相同点:都是容器管理对象,都可以获取Bean对象。
区别:

  1. BeanFactory属于更上层的接口,ApplicationContext是BeanFactory的一个子类,(父类里面的所有东西子类都有,子类里面的所有东西父类没有),所以ApplicationContext相比于BeanFactory拥有更多的功能(更多的功能包括:国际化的支持,资源访问的支持,以及事件传播机制的支持等等)。
  2. ApplicationContext和BeanFactory加载bean机制是完全不同的,当使用BeanFactory加载时,用的是懒加载(按需加载---------使用一个Bean加载一个Bean),启动非常快,内存占用少,后期的获取速度慢;ApplicationContext是一次性加载所有Bean对象,所以在启动的时候非常慢,启动之后获取对象非常快。

你可能感兴趣的:(java,开发语言)