框架-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 服 ...
随机推荐
- 十四、 React路由(react-router4.x): 动态路由、get传值、React中使用url模块
概述 新闻列表 -跳转-> 详情页 时,想把列表对应的id传到详情页里,可用到三种传值方法: 1.动态路由传值 2.get传值 3.localstorage传值 一.动态路由传值 [App.js ...
- java_05_IO
java_05_IO 1,动手动脑 使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件. 分析思路: 1)找到该文件夹下所有文件. 2)找出其中字节数大于 ...
- POJ 1408:Fishnet
Fishnet Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1921 Accepted: 1234 Descripti ...
- No enclosing instance of type test is accessible. Must qualify the allocation with an enclosing inst
今日遇到一个报错如下: No enclosing instance of type test is accessible. Must qualify the allocation with an en ...
- jQuery表格隔行换色和全选的实现
1.下载jQuery,并导入:https://blog.csdn.net/weixin_44718300/article/details/88746796 2.代码实现: <!DOCTYPE h ...
- springmvc的InternalResourceViewResolver自我理解
原文链接:https://blog.csdn.net/wwzuizz/article/details/78268007 它的作用是在Controller返回的时候进行解析视图 @RequestMapp ...
- RectTransform详解
乾坤那个大挪移 ----------------------------------------------------------------- 我是分割线 ------------------ ...
- VUE.js入门学习(5)- 插槽和作用域插槽
插槽: (1)用法 以前的写法:如果内容很多的话,就很烂了- 插槽写法:(PS:组建名不能用保留关键字) (2)具名插槽 (3)作用域插槽 必须template开始和结尾,这个插槽要声明我从子组建接收 ...
- sort()函数使用详解
使用时需要导入头文件<algorithm> #include<algorithm> 语法描述:sort(begin,end,cmp),cmp参数可以没有,如果没有默认非降序排序 ...
- C++逐行读取txt
C++读取txt文件的时候可以使用std::ifstream来实现,如果打开文件失败的话,其变量会是空的,所以可以用来判断是否打开成功. #include <stdlib.h> #in ...