Spring学习之旅(二)--容器
在 Spring 应用中,所有的对象都在 Spring 容器(container) 里,容器负责对象的创建、配置、装配并管理它们的整个生命周期。
Spring 容器
Spring 容器 并不是只有一个, Spring 自带了多个容器的实现,可以归为两种不同的类型:
- bean 工厂(org.springframework.beans.factory.eanFactory)
- 应用上下文(org.springframework.context.ApplicationContext)
虽然两者都可以使用,但是 bean 工厂 对大多数应用来说太低级了,因此我们通常会选择 应用上下文 的形式。
应用上下文
Spring 自带了多种类型的应用上下文:
| 类型 | 含义 |
|---|---|
| AnnotationConfigApplicationContext | 从一个或多个基于Java配置类中加载 Spring 应用上下文 |
| AnnotationConfigWebApplicationContext | 从一个或多个基于Java的配置类中加载Spring Web 应用上下文 |
| ClassPathXmlApplicationContext | 从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源 |
| FileSystemXmlapplicationcontext | 从文件系统下的一个或多个XML配置文件中加载上下文定义 |
| XmlWebApplicationContext | 从Web应用下的一个或多个XML配置文件中加载上下文定义 |
获取上下文
从 Java 配置中加载:
ApplicationContext context = new AnnotationConfigApplicationContext("com.config.KnightConfig.class");
从文件路径中加载:
ApplicationContext context = new FileSystemXmlapplicationcontext("d:/applictionContext.xml");
从类路径中加载:
ApplicationContext context = new ClassPathXmlApplicationContext("applictionContext.xml");
获取 bean
UserService userService = context.getBean(UserService.class);
bean 的生命周期

Spring 对 bean 进行实例化;
Spring 将值和 bean 的引用注入到 bean 对应的属性中;
如果 bean 实现了 BeanNameAware 接口,Spring 将 bean 的 Id 传递给 setBean-Name() 方法;
如果 bean 实现了 BeanFactoryAware 接口,Spring 将调用 setApplicationContext() 方法,将 bean 所在的应用上下文的一引用传入进来;
如果 bean 实现了 BeanPostProcessor 接口,Spring 将调用它们的 post-ProcessBeforeInitialization() 方法;
如果 bean 实现了 InitializingBean 接口,Spring 将调用它们的 after-PropertiesSet() 方法,类似地,如果 bean 使用了 init-method 申明了初始化方法,此方法也会被调用;
如果 bean 实现了 BeanPostProcessor 接口,Spring 将调用它们的 post-ProcessAfterInitialization() 方法;
bean 已经准备就绪,将一直驻留在应用上下文中,直到该应用上下文被销毁
如果 bean 实现了 DisposableBean 接口,Spring 将调用它的 destroy 接口方法。如果 bean 使用了 destroy-methode 声明了销毁方法,该方法也会被调用
Spring学习之旅(二)--容器的更多相关文章
- Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探
由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...
- Spring学习之旅(十)--MockMvc
在之前的 Spring学习之旅(八)--SpringMVC请求参数 我们是通过在控制台输出来验证参数是否正确,但是这样做实在是太耗时间了,我们今天来学习下 MockMvc,它可以让我们不需要启动项目就 ...
- 我的Spring学习记录(二)
本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...
- Spring学习之路二——概念上理解Spring
一.概念. Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Develop ...
- 滴滴Booster移动APP质量优化框架 学习之旅 二
推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 续写滴滴Booster移动APP质量优化框架学习之旅,上篇文章分 ...
- Hadoop学习之旅二:HDFS
本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...
- Spring学习进阶(二)Spring IoC
在使用Spring所提供的各种丰富而神奇的功能之前,必须在Spring IoC容器中装配好Bean,并建立Bean与Bean之间的关联关系.控制反转(Inverser of Control ioc)是 ...
- Spring学习之旅(二)极速创建Spring框架java Web工程项目
编译工具:eclipse 1)创建Web工程:spring_web_helloworld 2)导入所需jar包: 3)创建实体类:同上篇博文 4)创建配置文件hellobean.xml.同上篇博文 不 ...
- Spring 学习笔记(二)—— IOC 容器(BeanFactory)
使用Spring IoC容器后,容器会自动对被管理对象进行初始化并完成对象之间的依赖关系的维护,在被管理对象中无须调用Spring的API. 为了实现IoC功能,Spring提供了两个访问接口: or ...
随机推荐
- css 图片裁剪显示
用object-fit:cover object-fit属性详解 object-fit:CSS 属性指定替换元素的内容应该如何适应到其使用的高度和宽度确定的框. object-fit:fill 被替换 ...
- JAVA面试题 String s = new String("xyz");产生了几个对象?
面试官Q1:请问String s = new String("xyz");产生了几个对象? 对于这个Java面试题,老套路先上代码: public class StringTest ...
- Appium+python自动化(二十四)- 白素贞千年等一回许仙 - 元素等待(超详解)
简介 许仙小时候最喜欢吃又甜又软的汤圆了,一次一颗汤圆落入西湖,被一条小白蛇衔走了.十几年后,一位身着白衣.有青衣丫鬟相伴的美丽女子与许仙相识了,她叫白娘子.白娘子聪明又善良,两个人很快走到了一起.靠 ...
- <java程序大集合>
1.以下关于开发java程序的描述错误的是(). A.开发java程序的步骤包括:编写源程序,编译,运行 B.编写的java源程序文件使用.java作为扩展名 C:java源文件经编译后,生成后娺为. ...
- bit、byte、kb、mb、g的区别
1Byte=8bit1KB=1024Byte(字节)=8*1024bit1MB=1024KB1GB=1024MB1TB=1024GB bit是计算机数据的最小单元.要么是0,要么是1. byte 关键 ...
- 20190803 NOIP模拟测试12「斐波那契(fibonacci)· 数颜色 · 分组 」
164分 rank11/64 这次考的不算太差,但是并没有多大的可能性反超(只比一小部分人高十几分而已),时间分配还是不均,T2两个半小时,T1半个小时,T3-额十几分钟吧 然额付出总是与回报成反比的 ...
- DesignPattern系列__03依赖倒置原则
依赖倒置原则(Dependence Inversion Priiciple,DIP) 介绍 High level modules should not depend upon low level mo ...
- CEPH 自动化测试用例介绍
1.QA 的内部逻辑关系. 首先用一个图表示一下QA的内部的逻辑关系. 2.QA的脚本介绍 3.QA脚本运行
- Java虚拟机详解(四)------垃圾收集器
上一篇博客我们介绍了Java虚拟机垃圾回收,介绍了几种常用的垃圾回收算法,包括标记-清除,标记整理,复制等,这些算法我们可以看做是内存回收的理论方法,那么在Java虚拟机中,由谁来具体实现这些方法呢? ...
- prometheus-kafka-exporter部署
chart地址:https://gkarthiks.github.io/helm-charts/charts/prometheus-kafka-exporter/ 1.下载chart $ helm r ...