Spring 容器--如何创建和加载一个 Spring 容器?
2017-07-13 17:23
501 查看
在基于 Spring 的应用中,你的应用对象生存于 Spring 容器中。
容器是 Spring 框架的核心。Spring 容器使用 DI 管理构成应用的组件,它会创建相互协作的组件之间的关联。
Q:Spring 容器主要负责什么?
A:Spring 容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期,从生存到死亡。
Q:Spring自带了哪些容器实现?
A:第一类:bean 工厂是最简单的容器,提供基本的 DI 支持;第二类:应用上下文基于 BeanFactory 构建,并提供应用框架级别的服务。
Q:选择哪一类容器实现?
A:应用上下文。因为 bean 工厂对大多数应用来说往往太低级了,因此,应用上下文要比 bean 工厂更受欢迎。
AnnotationConfigApplicationContext:从一个或多个基于 Java 的配置类中加载 Spring 应用上下文。
AnnotationConfigWebApplicationContext:从一个或多个基于 Java 的配置类中加载 Spring Web 应用上下文。
ClassPathXmlApplicationContext:从类路径下的一个或多个 XML 配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。
FileSystemXmlapplicationcontext:从文件系统下的一个或多个 XML 配置文件中加载上下文定义。
XmlWebApplicationContext:从 Web 应用下的一个或多个 XML 配置文件中加载上下文定义。
如何使用?
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/a54c4fdd459694ea9aad91520617aa9e)
下面进行详细描述:
Spring 对 bean 进行实例化;
Spring 将值和 bean 的引用注入到 bean 对应的属性中;
如果 bean 实现了 BeanNameAware 接口,Spring 将 bean 的 ID 传递给 setBeanName()方法
如果 bean 实现了 BeanFactoryAware 接口,Spring 将调用 setBeanFactory()方法,将 BeanFactory 容器实例传入;
如果 bean 实现了 ApplicationContextAware 接口,Spring 将调用 setApplicationContext()方法,将 bean 所在的应用上下文的引用传入进来;
如果 bean 实现了 BeanPostProcessor 接口,Spring 将调用它们的 postProcessBeforeInitialization()方法;
如果 bean 实现了 InitializingBean 接口,Spring 将调用它们的 afterPropertiesSet()方法。类似地,如果 bean 使用 initmethod 声明了初始化方法,该方法也会被
bcc6
调用;
如果 bean 实现了 BeanPostProcessor 接口,Spring 将调用它们的 postProcessAfterInitialization()方法;
此时,bean 已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,知道该应用上下文被销毁;
如果 bean 实现了 DisposableBean 接口,Spring 将调用它的 destory() 接口方法。同样,如果 bean 使用 destroymethod 声明了销毁方法,该方法也会被调用。
上一篇: Spring 是如何简化 Java 开发的?
下一篇:Spring 模块和 Spring Portfolio
容器是 Spring 框架的核心。Spring 容器使用 DI 管理构成应用的组件,它会创建相互协作的组件之间的关联。
Q:Spring 容器主要负责什么?
A:Spring 容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期,从生存到死亡。
Q:Spring自带了哪些容器实现?
A:第一类:bean 工厂是最简单的容器,提供基本的 DI 支持;第二类:应用上下文基于 BeanFactory 构建,并提供应用框架级别的服务。
Q:选择哪一类容器实现?
A:应用上下文。因为 bean 工厂对大多数应用来说往往太低级了,因此,应用上下文要比 bean 工厂更受欢迎。
2.1 使用应用上下文
Spring 自带了多种类型的应用上下文。AnnotationConfigApplicationContext:从一个或多个基于 Java 的配置类中加载 Spring 应用上下文。
AnnotationConfigWebApplicationContext:从一个或多个基于 Java 的配置类中加载 Spring Web 应用上下文。
ClassPathXmlApplicationContext:从类路径下的一个或多个 XML 配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。
FileSystemXmlapplicationcontext:从文件系统下的一个或多个 XML 配置文件中加载上下文定义。
XmlWebApplicationContext:从 Web 应用下的一个或多个 XML 配置文件中加载上下文定义。
如何使用?
// 从指定的文件系统路径下,查找 knight.xml 文件 ApplicationContext context = new FileSystemXmlApplicationContext("d:/knight.xml"); // 使用 ClassPathXmlApplicationContext 从应用的类路径下加载应用上下文 ApplicationContext context = new ClassPathXmlApplicationContext("knight.xml"); // 从 Java 配置中加载应用上下文 ApplicationContext context = new AnnotationConfigApplicationContext(com.springinaction.knights.config.KnightConfig.class);
2.2 bean 的生命周期
bean 装载到 Spring 应用上下文中的一个典型的生命周期过程。下面进行详细描述:
Spring 对 bean 进行实例化;
Spring 将值和 bean 的引用注入到 bean 对应的属性中;
如果 bean 实现了 BeanNameAware 接口,Spring 将 bean 的 ID 传递给 setBeanName()方法
如果 bean 实现了 BeanFactoryAware 接口,Spring 将调用 setBeanFactory()方法,将 BeanFactory 容器实例传入;
如果 bean 实现了 ApplicationContextAware 接口,Spring 将调用 setApplicationContext()方法,将 bean 所在的应用上下文的引用传入进来;
如果 bean 实现了 BeanPostProcessor 接口,Spring 将调用它们的 postProcessBeforeInitialization()方法;
如果 bean 实现了 InitializingBean 接口,Spring 将调用它们的 afterPropertiesSet()方法。类似地,如果 bean 使用 initmethod 声明了初始化方法,该方法也会被
bcc6
调用;
如果 bean 实现了 BeanPostProcessor 接口,Spring 将调用它们的 postProcessAfterInitialization()方法;
此时,bean 已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,知道该应用上下文被销毁;
如果 bean 实现了 DisposableBean 接口,Spring 将调用它的 destory() 接口方法。同样,如果 bean 使用 destroymethod 声明了销毁方法,该方法也会被调用。
上一篇: Spring 是如何简化 Java 开发的?
下一篇:Spring 模块和 Spring Portfolio
相关文章推荐
- Spring 容器从加载文件到创建一个完整Bean的工作流程
- Spring 如何初始化一个容器,( 加载xml 文件 )
- jQuery Howto: 如何快速创建一个AJAX的"加载"的图片效果
- 如何手动控制spring容器的加载
- 第十章 Scala 容器基础(二十四):给集合创建一个懒加载视图
- spring in action 学习笔记三:对spring 容器的理解,以及如何利用AnnotationConfigApplicationContext这个容器创建对象
- spring boot如何在所有bean初始化之前加载一个自定义类?
- 如何快速创建一个AJAX的"加载"的图片效果
- 基础教学——如何用maven工具创建一个springmvc+mybatis的项目
- 监听器如何获取Spring配置文件(加载生成Spring容器)
- docker如何创建一个运行后台进程的容器并同时提供shell终端
- Github网站加载不完全,响应超时,如何解决 Github是一个代码托管平台和开发者社区,开发者可以在Github上创建自己的开源项目并与其他开发者协作编码。毫不夸张地说,高效利用Github是一
- 如何交互式地创建一个Docker容器
- 集群: 如何在spring 任务中 获得集群中的一个web 容器的端口号?
- 如何用Swift创建一个复杂的加载动画
- Flex中如何创建一个可以自动换行并调整布局的ToolBar容器
- docker如何创建一个运行后台进程的容器并同时提供shell终端
- WEB启动时,如何加载spring容器和struts2容器(bean的注入和url如何请求)
- 如何在Spring容器中加载自定义的配置文件
- SpringBoot入门学习一(如何使用IDEA创建一个SpringBoot应用)