Spring 配置容器的两种方式:
第一种:ApplicationContext 接口容器
ApplicationContext 接口的继承结构图如下
A、配置在类路径下,使用 ClassPathXMlApplicationContext 实现类加载
1 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
B、配置在本地磁盘目录下,用 FileSystemXmlApplicationContext 实现类加载
1 ApplicationContext ac = new FileSystemXmlApplicationContext("D:/applicationContext.xml");
C、配置在项目根目录下(与 src 包同级),同样用 FileSystemXmlApplicationContext 实现类加载
1 ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
获取了 ApplicationContext 容器之后,可以使用 getBean() 方法获取 Bean 对象
1 ISomeService service = (ISomeService) ac.getBean("someService");
第二种:BeanFactory接口容器
BeanFactory 接口对象也可以作为 Spring 容器出现。BeanFactory 接口是 ApplicationContext 接口的父类。
若要创建 BeanFactory 容器,需要使用其实现类 XmlBeanFactory ,该类可以加载 Spring 配置文件,而 Spring 配置文件以 Resource 的形式出现在 XMLBeanFactory 的构造参数中,Resource 是一个接口,其具体有两个实现类,
ClassPathResource:指定类路径下的资源文件
FileSystemResource:指定项目根路径或者本地磁盘路径下的资源文件
1 BeanFactory bf = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
同样创建 BeanFactory 之后可以调用重载的 getBean() 方法获取指定的 Bean 对象
1 ISomeService service = (ISomeService) bf.getBean("someService");
两个容器的区别:
装配时机不同,
ApplicationContext 容器会在容器对象初始化的时候,将其中所有的对象一次性全部装配好,以后在要使用这些对象的时候,直接从容器中获取即可。执行效率较高,但是占用内存。
BeanFactory 容器,对容器中对象的装配和加载采用延迟加载的策略,即在第一次调用 getBean() 方法的时候,才真正装配对象