框架-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 服 ...
随机推荐
- 第五篇Django URL name 详解
Django URL name 详解 利用Django开发网站,可以设计出非常优美的url规则,如果url的匹配规则(包含正则表达式)组织得比较好,view的结构就会比较清晰,比较容易维护. Djan ...
- CentOS 7 下oracle 11G R2 ADG 搭建
本文记录ADG搭建操作步骤,首先在虚拟机CentOS中安装并配置好oracle 11g R2(具体安装步骤在我的另一篇博客中),然后拷贝一份虚拟机,修改新虚拟机的主机名和ip配置,这时候主库和备库是一 ...
- 每天一点点之 taro 框架 - 生命周期 & state
注意:从vue过来的小朋友要注意,taro直接赋值时不会更新组件的,同react一致更新数据必须调用setState方法,例如:this.setState({name:'张三'}) 1.render函 ...
- HDU 5480:Conturbatio 前缀和
Conturbatio Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- storm on yarn(CDH5) 部署笔记
按照storm on yarn(Apache hadoop)部署好之后,然后修改HADOOP_HOME,hadoopenv.sh中的JAVA_HOME,以及storm-yarn-master中pom. ...
- idea自定义模版
点小灯 编辑live模版设置 模版全称 private static final Logger logger = LoggerFactory.getLogger($classname$.class); ...
- 实验吧web-中-忘记密码了
打开网页,查看源代码,好像发现了管理员邮箱而且还是用vim编辑的. 我们提交一下这个邮箱,虽然提交成功了,但好像并没什么用. 我们随便提交一个,会弹出 看来好像还有个step2呢,我们查看源代码(在这 ...
- adfs环境安装
安装文档参考: https://docs.microsoft.com/zh-cn/windows-server/identity/ad-fs/deployment/set-up-the-lab-env ...
- 理解Spring Boot Actuator
Spring Boot Actuator 用于监控和管理spring应用,可通过HTTP Endpoint或JMX Bean与其交互.
- 1.1 js中函数定义解析(学习笔记)
1.1.1函数的分类 函数声明式 :使用function声明函数,并指定函数名. 函数表达式:使用function声明函数,但未指定函数名. 函数表达式2.匿名函数,匿名函数有很多作用,赋予一个变量则 ...