框架-Spring容器
1. Spring Ioc容器
容器是Spring框架的基础,容器会创建、串联、配置对象,并且能管理对象的整个生命周期。如下是代表 Spring工作原理

MetaData 指定哪些对象实例化、配置、组装;metadata可以是xml文件、注释或者java代码;Spring Ioc容器利用POJO类集合、配置文件Metadata产生一个可配置、可执行的系统或应用。
Spring提供两大类容器:
(1) BeanFactory Container
定义在org.springframework.beans.factory.BeanFactoryinterfac,提供DI技术的最简单容器;BeanFactory及其相关接口BeanFactoryAware, InitializingBean, DisposableBean 共同支持第三方框架与Spring的整合;
(2) ApplicationContext Container
ApplicationContext 容器支持从properties file解析文本messages、给特定event listeners发布应用事件;容器定义org.springframework.context.ApplicationContext interface。
ApplicationContext 容器包含所有BeanFactory功能,所以一般使用ApplicationContext ,但是BeanFactory仍然可用于轻量级应用,如 设备或applet-based 应用。
2. Bean定义
Bean是所有Spring Ioc容器管理的应用后台对象。IoC容器读取从配置metadata文件获取bean的定义信息,包含 如何创建bean、bean的生命周期、bean的依赖三方面:
|
Class |
此属性是强制的,指定创建bean对象的类 |
|
Name |
指定bean的唯一识别标志;xml配置文件中使用id或name属性 |
|
Scope |
Bean对象的scope |
|
constructor-arg |
用来注入依赖 |
|
properties |
注入依赖 |
|
autowiring mode |
注入依赖 |
|
lazy-initialization mode |
告诉Ioc容器是在首次调用创建bean实例 |
|
initialization method |
Bean的所有必要属性设置完成后,被回调的函数 |
|
destruction method |
Bean销毁后,被回调的函数 |
正如上文提到,提供配置metadata的三种方式:
- l Xml配置文件
- l 注释方式
- l Java代码方式
3. Bean scope
|
singleton |
单例模式,Spring每次返回同一个对象 |
|
prototype |
原型模式,一个bean定义适用于任意多个对象实例 |
|
Request |
一个bean定义适用于 Http请求 |
|
Session |
一个bean定义适用于HTTP session |
|
global-session |
一个bean定义适用于global HTTP session |
4. Bean生命周期
Bean创建后,需要完成初始化;bean从容器移除后,需要执行清理动作;
Initialization callbacks
接口org.springframework.beans.factory.InitializingBean 方法afterPropertiesSet()定义初始化;
public class ExampleBean implements InitializingBean {
public void afterPropertiesSet() {
// do some initialization work
}
}
或者
<bean id = "exampleBean" class = "examples.ExampleBean" init-method = "init"/>
Init-method 属性指定初始化方法 名称;
public class ExampleBean {
public void init() {
// do some initialization work
}
}
5. Bean post process(后处理)
BeanPostProcessor后处理 接口定义的回调函数,支持可定制的实例化逻辑、依赖逻辑等。用户可通过插入一个或多个“后处理”实现,定制化bean实例。
6. Bean 定义继承
Bean定义中包含的配置信息、构造参数、属性值,以及容器指定信息 如初始化方法、静态工厂名称等,都可以通过继承方式 child bean获得。这里的“继承”与Java中的“继承”没有任何关系,但含义是一样的。
Bean 模板beanTeamplate,指定 abstract属性为 true,不能指定class
<bean id = "beanTeamplate" abstract = "true">
<property name = "message1" value = "Hello World!"/>
<property name = "message2" value = "Hello Second World!"/>
<property name = "message3" value = "Namaste India!"/>
</bean>
<bean id = "helloIndia" class = "com.tutorialspoint.HelloIndia" parent = "beanTeamplate">
<property name = "message1" value = "Hello India!"/>
<property name = "message3" value = "Namaste India!"/>
</bean>
框架-Spring容器的更多相关文章
- 跟着刚哥学习Spring框架--Spring容器(二)
Spring容器 启动Spring容器(实例化容器) -- IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化(加载启动),这样才可以从容器中获取Bean的实例并使用. Bean是S ...
- Spring框架IOC容器和AOP解析
主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置 一.S ...
- Spring框架:Spring容器具体解释
Spring容器 Spring容器能够帮助你管理所有的Bean对象.专业术语称之为IoC控制反转.在传统的程序中.对象的生成都是由开发人员完毕的.而在控制反转中,对象的生成所有都交给框架完毕.这种优点 ...
- spring框架--IOC容器,依赖注入
思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action 多个 [维护成员变量] service 一个 [不需要维护公共变量] dao 一个 [不需要维护 ...
- Java框架spring 学习笔记(一):SpringBean、ApplicationContext 容器、BeanFactory容器
Spring容器是Spring框架的核心,容器可以创建对象并创建的对象连接在一起,配置和管理他们的整个生命周期.Spring 容器使用依赖注入(DI)来作为管理应用程序的组件,被称为 Spring B ...
- sping框架(3)— 使用spring容器
spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口.它们都可以代表spring容器,sp ...
- Spring框架IOC容器和AOP解析 非常 有用
Spring框架IOC容器和AOP解析 主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面 ...
- Spring 框架学习 —— 容器
容器是 Spring 框架的核心.Spring 容器使用 DI(依赖注入)机制管理构成应用的组件(类),所谓 DI,也即是其能够创建相互协作的组件(类)之间的关联(依赖). 1. 应用上下文(Appl ...
- Java框架Spring Boot & 服务治理框架Dubbo & 应用容器引擎Docker 实现微服务发布
微服务系统架构实践 开发语言Java 8 框架使用Spring boot 服务治理框架Dubbo 容器部署Docker 持续集成Gitlab CI 持续部署Piplin 注册中心Zookeeper 服 ...
随机推荐
- class(一)--类的创建
class是ES6引入的,它并不是一种全新的继承模式,而只是基于原型对象继承封装的语法糖,因此只要充分理解原型对象,原型链,继承等知识,class也就很好容易理解了 类的声明 ES5及之前是通过创建一 ...
- hdu4632 Palindrome subsequence 回文子序列个数 区间dp
Palindrome subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65535 K (Java/ ...
- ffmpeg 模块简介
FFmpeg 是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.它包括了领先的音/视频编码库libavcodec 等.libavformat:用于各种音视频封装格式的生成和解析 ...
- blkid命令 获取文件系统类型、UUID
在Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询.blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型.LABEL.UUID等信息进行查询.要使用这个命令必须 ...
- html 鼠标样式 鼠标悬停 小手样式
在style中添加cursor:pointer 实现鼠标悬停变成小手样式 先来一个示例 <div style="float:right"> <a class=&q ...
- 碎碎念(DP)
链接:https://ac.nowcoder.com/acm/contest/3006/F来源:牛客网 题目描述 在ACM比赛里,除了CE以外都是有效的提交.每一个提交都会有其评测的结果,或是AC,或 ...
- ACM&OI 基础数学算法专题
[前言] 本人学习了一定时间的算法,主要精力都花在数学类的算法上面 而数学类的算法中,本人的大部分精力也花费在了数论算法上 此类算法相对抽象,证明过程比较复杂 网络上的博客有写得非常好的,但也有写得不 ...
- loback.xml 在idea中代码自动完成
1.下载xsd文件 2.idea添加xsd文件 URI: http://ch.qos.logback/xml/ns/logback File: D:\env\plugins\logback\logba ...
- [ACTF2020 新生赛]Include
0x00 知识点 本地文件包含 ?file=php://filter/read/convert.base64-encode/resource=index.php ?file=php://filter/ ...
- [RoarCTF 2019]Simple Upload
0x00 知识点 1:Think PHP上传默认路径 默认上传路径是/home/index/upload 2:Think PHP upload()多文件上传 think PHP里的upload()函数 ...