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 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 上学时,老师总说:不会你就问,但多数时候都不知道要问什么! 你总会在小傅哥的文章前言 ...
随机推荐
- Linux--NiaoGe-Service-04
操作系统版本:CentOS 6.10 x86_64 查看内核所获取到的网卡信息 [root@xueji ~]# dmesg | grep -in eth :e1000 ::-bit) :0c::6b: ...
- SSAS中雪花模型
上面的[销售事实表]与[门店]维度.[集团]维度就组成了一个雪花模型. 1.可以把[集团]关联到[门店]的维度上去: 2.如果要把[集团]作为一个单独的维度,先在[维度]里把Dim_Group添加进来 ...
- Spark Mllib里如何删除每一条数据中所有的双引号“”(图文详解)
不多说,直接上干货! 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的第13章 使用决策树二元分类算法来预测分类StumbleUpon数据集
- php pack、unpack、ord 函数使用方法(二进制流接口应用实例)
在工作中,我也逐渐了解到pack,unpack,ord对于二进制字节处理的强大. 下面我逐一介绍它们.在我们工作中,用到它们的估计不多. 我在最近一个工作中,因为通讯需要用到二进制流,然后接口用php ...
- Android studio 断点调试
最近进行业务测试,总是被测试环境不稳定或者测试数据错误困扰,一有问题就去找开发,自己都觉得很烦,所以就自己学着调试起来,这样以后遇到问题就可以自己定位的更深入了. 1.确保连接设备且进 ...
- 用vue.js重构订单计算页面
在很久很久以前做过一个很糟糕的订单结算页面,虽然里面各区域(收货地址)使用模块化加载,但是偶尔会遇到某个模块加载失败的问题导致订单提交的数据有误. 大致问题如下: 1. 每个模块都采用usercont ...
- Azure资源管理工具Azure PowerShell介绍
什么是 Azure PowerShell? Azure PowerShell 是一组模块,提供用于通过 Windows PowerShell 管理 Azure 的 cmdlet.你可以使用 cmdle ...
- 电脑连接海信电视 HDMI
注意:我们家的电视是海信的,所以不能代表所有的电视哦~~~ 家里电视有线电视已经过期很长时间了,早就想把电脑连接到电视上用电视做显示器的心了,今天来兴趣了,就弄了一下!!! 用电脑连接电视需要先解决两 ...
- Openjudge 2.5 6264:走出迷宫
总时间限制: 1000ms 内存限制: 65536kB 描述 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单. 假设你已经得到了一个n* ...
- C# Process.Start方法
System.Diagnostics.Process.Start(); 主要功能: 1.打开某个链接网址(弹窗). 2.定位打开某个文件目录. 3.打开系统特殊文件夹,如“控制面板”等. Proces ...