Spring容器
创建容器的几种方式
方式一:类路径加载配置文件
ApplicationContext context =new ClassPathXmlApplicationContext("application.xml");
方式二:文件路径加载配置文件
ApplicationContext context =new FileSystemXmlApplicationContext("D:\\applicationContext.xml");
方式三:加载多个配置文件
ApplicationContext context =new ClassPathXmlApplicationContext("bean1.xml","bean2.xml");
获取bean
方式一:使用bean名称获取
BookDao bookDao =(BookDao) context.getBean("bookDao");
方式二:使用bean名称获取并指定类型
BookDao bookDao =context.getBean("bookDao",BookDao.class);
方式三:使用bean类型获取
BookDao bookDao =context.getBean(BookDao.class);
按照类型查找时,容器中这个类型的bean只能有一个,存在多个类型相同的bean就会报错。
容器类层次结构
这个层次图中,第一个ApplicationContext接口提供的是基础的功能,下面的ConfigurableApplicationContext接口是一个子接口,对接口进行了功能的追加。 其他都是他们的实现类
BeanFactory
- 是Spring框架中最底层的接口,是IoC(控制反转)容器的核心。
- 主要负责Bean的定义、加载、实例化、依赖注入和生命周期管理。
- 提供了IoC容器最基本的功能。
ApplicationContext
- 是BeanFactory的子接口,由BeanFactory派生而来。
- 扩展了BeanFactory的功能,并提供了更全面的容器特性。
- 是Spring应用中的核心容器,用于管理和配置应用中的对象(称为beans)。
BeanFactory和ApplicationContext的区别
功能差异
BeanFactory:
- 功能较为基础,主要关注于Bean的实例化、配置和生命周期管理。
- 采用延迟加载策略,即在容器启动时不会立即创建所有Bean,而是在Bean被请求时(通过getBean()方法)才会创建和加载。
- 不支持国际化、资源文件访问等高级功能。
- 主要面向Spring框架本身,为框架内部的Bean管理提供基础设施。
ApplicationContext:
- 包含了BeanFactory的所有功能,并在此基础上增加了许多高级特性,如AOP(面向切面编程)、事件发布、国际化、资源加载、Bean生命周期管理、安全性等。
- 在容器启动时,会一次性创建并加载所有Bean,这使得它能够在启动时发现配置错误,如依赖注入问题。
- 提供了更丰富的Bean管理功能,如自动装配、生命周期管理等。
- 主要面向使用Spring框架的开发者,提供了更全面的容器服务。
加载与配置方式
BeanFactory:
- 通常以编程的方式创建和配置
ApplicationContext:
- 支持以声明的方式(如XML配置文件、注解等)进行配置,使得配置更加灵活和方便。
适用场景
BeanFactory:适用于资源受限的环境或轻量级的应用程序,因为它具有较小的内存占用和较快的启动速度。
ApplicationContext:适用于大多数企业级应用,特别是那些需要全面容器服务的场景。它提供了更丰富的功能和更好的开发体验。