Spring之ApplicationContext

(1)ApplicationContext接口容器

ApplicationContext用于加载Spring的配置文件,在程序中充当“容器”的角色。其实现类有两个。通过Ctrl +T查看:

A、配置文件在类路径下
若Spring配置文件存放在项目的类路径下,则使用ClassPathXmlApplicationContext实现类进行加载。

B、配置文件在本地目录中
若Spring配置文件存放在本地磁盘目录中,则使用FileSystemXmlApplicationContext实现类进行加载。

C、配置文件在项目根路径下
若Spring配置文件存放在项目的根路径下,同样使用FileSystemXmlApplicationContext实现类进行加载。
下面是存放在项目根路径下的情况,该配置文件与src目录同级,而非在src中。

    @Test
    public void test02() {
//       ClassPathXmlApplicationContext()创建容器, applicationContext.xml需要放在src/resource目录下
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
        HelloWorld hw= (HelloWorld) applicationContext.getBean("helloWorld");
        System.out.println("====================================");
        System.out.println(hw.getMessage());

    }

    @Test
    public void test03() {
//        使用FileSystemXmlApplicationContext()创建容器,applicationContext.xml需要放在根目录src下
        ApplicationContext applicationContext=new FileSystemXmlApplicationContext("applicationContext.xml");
        HelloWorld hw= (HelloWorld) applicationContext.getBean("helloWorld");
        System.out.println("====================================");
        System.out.println(hw.getMessage());
    }

(2)BeanFactory接口容器

BeanFactory接口对象也可作为Spring容器出现。BeanFactory接口是ApplicationContext接口的父类。

若要创建BeanFactory容器,需要使用其实现类XmlBeanFactory(Ctrl+T查看继承关系)。该类可以加载Spring配置文件。

    @Test
    public void test04(){
//        这个容器的对象不是在容器初始化时创建的,而是在使用是创建的
        BeanFactory bf=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
        HelloWorld hw= (HelloWorld) bf.getBean("helloWorld");
        System.out.println("===================================");
        System.out.println(hw.getMessage());
    }

而Spring配置文件以资源Resouce的形式出现在XmlBeanFactory类的构造器参数中。Resouce是一个接口,其具有两个实现类:
. ClassPathResource:指定类路径下的资源文件
. FileSystemResource:指定项目根路径或本地磁盘路径下的资源文件。

在创建了BeanFactory容器后,便可使用其重载的getBean()方法,从容器中获取指定的Bean对象。

(3)两个接口容器的区别

虽然这两个接口容器所要加载的Spring配置文件是同一个文件,但在代码中的这两个容器对象却不是同一个对象,即不是同一个容器:它们对于容器内对象的装配(创建)时机是不同的。
装配时机测试时需要注意,首先要在容器中对象StudentServiceImpl类的无参构造器中添加一个输出语句,以显示其是否执行。

A、ApplicationContext容器中对象的装配时机
ApplicationContext容器,会在容器对象初始化时,将其中的所有对象一次性全部装配好。以后代码中若要使用到这些对象,只需从内存中直接获取即可。执行效率较高。但占用内存。

B、BeanFactory容器中对象的装配时机
BeanFactory容器,对容器中对象的装配与加载采用延迟加载策略,即在第一次调用getBean()时,才真正装配该对象。

posted @ 2018-05-09 14:35  Mars.wang  阅读(427)  评论(0编辑  收藏  举报