bean容器能力
bean容器能力
对bean容器的最简单的述求
- 能生产bean
- 能注入组装bean: 字段,构造函数
spring bean容器(3.0版本)的能力列表
- 能生产bean
- 能注入组装bean:字段,构造函数的参数(可以按参数类型注入-type,也可以按参数位置注入-index,也可以按参数名字注入),调用指定方法(lookup-method)
- 能支持生产bean的scope:单例,多例,web请求,web session,ThreadLocal级等
- 能引入properties文件作为注入源
- 能支持特殊值注入,诸如null,List,Map,Properties等
- 能在进行注入之前进行值转换,比如数组转成集合,字符串转成数字,字符串转换成resource
需要梳理 能支持哪些转换?
org.springframework.core.convert.converter.Converter<S, T>
文档参见 - 能在进行注入之前进行待条件的值转换,即在满足条件时再触发转换
org.springframework.core.convert.converter.ConditionalGenericConverter
文档参见 - 支持在进行注入之前进行值格式化,同时支持注解 @NumberFormat @DateTimeFormat等
- 支持在进行注入之前进行对值校验, 遵循JSR-303
- 能支持 用户定义生产bean 的工厂
- 能将bean容器与struts,junit等第三方框架对接,作为其bean的产生实现方式
- 容器对接多种规范的容器,诸如servlet容器等
- 支持bean查找,属性字段值设置与获取,方法调用,集合元素按index获取,逻辑数学运算,命名变量等能力的表达式(JSP 2.1 specification的一个扩展)
- 支持 字段值 来自于表达式
private @Value("#{jdbcProperties.url}") String jdbcUrl;
- 兼容 standard JDK PropertyEditors
- 支持字段值转换的自定义实现的SPI
- 支持生产bean时,触发其方法调用,并可以用注解结合表达式编写声明参数值来源
@Value("#{systemProperties.databaseName}")
public void setDatabaseName(String dbName) { … }
- 支持bean metadata注解式配置:
ConfigurationBeanDependsOnPrimaryLazyImportImportResourceValue
RequiredAutowiredInjectQualifierResourcePostConstructPreDestroyServiceRepository - 支持加了
Configuration注解的java类作为容器的描述
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
- 支持容器的描述文件的import能力,比如在一个application-1的xml中import另一个application-2的xml文件
- 支持bean的name的别名,多系统协同时可以使用,使得bean的命名清晰
- 支持用类的静态方法作为生产该类bean的工厂行为。
- 支持用指定类的指定静态方法生产具体bean的行为
参见文档 - 支持声明式properties注入
jdbc.driver.className=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb - 用idref或者ref标签配合local使用,可以达到仅使用本容器中的bean进行注入。
As such, using the local variant is the best choice (in order to know about errors as early as possible) if the target bean is in the same XML file.
- 用idref或者ref标签配合parent使用,可以达到仅使用父容器中的bean进行注入
- 支持在注入时,声明所需要的属性,类似内部类,此处声明的实例是多实例的且不会被其他人ref(因为没有id和name)
<bean id="outer" class="...">
<!-- instead of using a reference to a target bean, simply define the target bean inline -->
<property name="target">
<bean class="com.example.Person"> <!-- this is the inner bean -->
<property name="name" value="Fiona Apple"/>
<property name="age" value="25"/>
</bean>
</property>
</bean>
支持复合属性注入,如对bean的属性字段的子字段进行注入,比如需要主要实例a的字段b是B类型,Bclass有个c字段,那么可以注入a时直接给b的c字段注入。
支持显示声明(描述) bean的依赖,比如a depends-on b,那么在a构造前 会先把b构造好。主要用于一些静态初始化等,诸如数据库的驱动注册。
对于单例bean,支持可选的初始化阶段:容器启动时和bean被用到时。可以用lazy-init标识一个单例bean在被用到时再初始化bean。默认行为是容器启动时初始化bean,因为这样要是缺了什么bean就能立即通过错误知道。
支持整个容器级别的默认延迟初始化行为设置
支持按name,按type自动装配
支持bean和beans粒度的自动装配关闭autowire-candidate
支持bean的普通方法在调用时 用 replaced-method替换入参值 。 待做个demo。
支持自定义容器中bean的生命周期
org.springframework.beans.factory.config.Scope支持容器生命周期的回调动作插入 afterPropertiesSet(容器注入完成后的回调) init-method(bean的初始化方法) destroy-method(bean销毁时的方法) 容器关闭hook注册 支持bean和beans级别设置
按层级(inheritance)描述bean容器中bean定义。bean a是父实例是抽象的,bean b是子实例,可以将其parent指向bean a,使用bean a的所有配置信息,包括注入的属性字段等等,也可以覆盖字段。而且父实例bean a可以不用指向任何class,只需要设置其abstract为true即可。
bean容器自身支持扩展点 BeanPostProcessor(postProcessBeforeInitialization,postProcessAfterInitialization)
这个值得一看,自身就有很多实现。
BeanFactoryPostProcessor(postProcessBeanFactory)支持bean的id分类
自动装配的component-scan扫描支持include和exclude的filter
支持国际化能力 ResourceBundleMessageSource
容器内建事件支持 ContextRefreshedEvent ContextStartedEvent ContextStoppedEvent ContextClosedEvent RequestHandledEvent
自定义容器事件支持ApplicationEvent
spring DM能力列表
- OSGI bundle的三种状态支持 installed, resolved, starting,stopping,uninstalled or active(OSGI能力)
- 隔离业务逻辑到模块中,在运行期强制模块化(OSGI能力)
- 多版本模块或者库并存(OSGI能力)
- 运行时,动态安装升级与卸载(OSGI能力)
- spring dm应用结构示意图
- 用osgi:service 标签支持接口暴露
- 定制支持OSGI的IO能力
- 支持bundle级别的scope
- 用service与interfaces标签配合使用 将一个bean注册为多个接口的实现
- registration-listener支持注册监听器 也有去注册监听器
- reference标签支持接口引用
bean容器能力的更多相关文章
- JavaEE Tutorials (6) - 使用嵌入式企业bean容器
6.1嵌入式企业bean容器概述826.2开发嵌入式企业bean应用82 6.2.1运行嵌入式应用83 6.2.2创建企业bean容器83 6.2.3查找会话bean引用84 6.2.4关闭企业bea ...
- Ioc及Bean容器(三)
专题一 IoC 接口及面向接口编程 什么是 IoC Spring 的Bean配置 Bean 的初始化 Spring 的常用注入方式 接口 用于沟通的中介物的抽象化 实体把自己提供给外界的一种抽象化说明 ...
- Spring 学习——Bean容器
Bean容器初始化 基础 org.springframework.beans org.springframework.context BeanFactory提供配置结构和基本功能,加载并初始化Bean ...
- STL容器能力一览表和各个容器操作函数异常保证
STL容器能力一览表 Vector Deque List Set Multiset map Multimap 典型内部 结构 dynamic array Array of arrays Doubly ...
- Spring学习二----------IOC及Bean容器
© 版权声明:本文为博主原创文章,转载请注明出处 接口 用于沟通的中介物的抽象化 实体把自己提供给外界的一种抽象化说明,用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的 ...
- 手写web框架之实现Bean容器
实现Bean容器 使用ClassHelper可以获取所加载的类,但无法通过类来实例化对象,因此我们需要提供一个反射工具类,让它封装java反射相关的API,对外提供更好用的工具方法.将该类命名为 ...
- Spring——IOC与Bean容器
[IOC] (1)IOC:控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护.也就是说由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中 (2)DI: ...
- Bean容器的初始化
Bean容器的初始化
- 《Spring 手撸专栏》第 2 章:小试牛刀(让新手能懂),实现一个简单的Bean容器
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 上学时,老师总说:不会你就问,但多数时候都不知道要问什么! 你总会在小傅哥的文章前言 ...
随机推荐
- Mex(线段树的巧妙应用)
题目要求求某段区间第一个没有出现的数(0,1,2,3....) ,对于所有的区间,我们把这样的数加起来最后得到一个结果. 首先,我们要求出这样的数,然后还得列举出所有的区间,复杂度太大了. 换种思路, ...
- Java方式配置Spring
概述 本文主要讲的是如何使用Java Bean来配置Spring,而不是用xml来配置Spring. 本文主要是代码,需要注意的都在注释里面. 代码打包下载地址(注:项目使用Maven构建) Java ...
- I/O————数据流
如何将一个long类型的数据写入文件中? 转字符串 → 通过 getbytes() 写进去,费劲,而且在此过程中 long 类型的数需要不断地转换. 现在,Java 中的数据流能够很好的解决这个问题( ...
- Django中多表的增删改查操作及聚合查询、F、Q查询
一.创建表 创建四个表:书籍,出版社,作者,作者详细信息 四个表之间关系:书籍和作者多对多,作者和作者详细信息一对一,出版社和书籍一对多 创建一对一的关系:OneToOne("要绑定关系的表 ...
- tar.gz
tar.gz,或者.tgz的文件一般是在UNIX下用tar和gunzip压缩的文件.可能的文件名还有.tar.gz等.gunzip是一种比pkzip压缩比高的压缩程序,一般 UNIX下都有.tar是一 ...
- [jQuery] Cannot read property ‘msie’ of undefined错误的解决方法 --转
初用Yii的srbac模块.出现 Cannot read property ‘msie’ of undefined 错误.上网查询,找到如下的文章.使用文末的打补丁的方法,成功搞定.感谢. ===== ...
- IjkPlayer播放器秒开优化以及常用Option设置
https://blog.csdn.net/shareus/article/details/78585260 ijkplayer点播和直播视频 问题 解决及优化 https://blog.csdn. ...
- netstat Recv-Q和Send-Q详解
http://blog.csdn.net/sjin_1314/article/details/9853163 通过netstat -anp可以查看机器的当前连接状态: Active Interne ...
- java在线聊天项目1.3版 ——设计好友列表框功能
设计好友列表框功能,思路—— 1.当客户端成功登陆后,则客户端把成功登陆信息发送给服务端, 2.由服务端将接收到来自各个成功登陆的客户端的用户信息添加进好友列表, 3.每当有成功登陆的用户就向各个客户 ...
- Ruby设计模式-观察者模式学习笔记
observer.rb #!/bin/env ruby # encoding: utf-8 require 'observer' class CriminalMovement include Obse ...