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注解式配置:
Configuration
Bean
DependsOn
Primary
Lazy
Import
ImportResource
Value
Required
Autowired
Inject
Qualifier
Resource
PostConstruct
PreDestroy
Service
Repository
- 支持加了
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 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 上学时,老师总说:不会你就问,但多数时候都不知道要问什么! 你总会在小傅哥的文章前言 ...
随机推荐
- MDX查询语句
另:15个经典的MDX查询语句 另:http://www.cnblogs.com/biwork/p/3437959.html 1.排名+排序+量值过滤: WITH member [Measures]. ...
- 用ssh-key-gen 在本地主机上创建公钥和密钥
用ssh-key-gen 在本地主机上创建公钥和密钥 ligh@local-host$ ssh-keygen -t rsa
- ItemsControl Grouping分组
ItemsControl属性GroupStyle Grouping再ItemsControl源代码 public class ItemsControl : Control, IAddChild, IG ...
- sql server 时间查询
select CONVERT(varchar, getdate(),8 ) --获取当前时间时分14:13:59 select CONVERT(varchar, getdate(),23 ) - ...
- LogBack日志小记
优势 看了一下Logback的官方文档,说换成LogBack的原因大概有一下几个: 1. 说是logBack的设计开发和log4j是同一批人员,重写了内核,习惯上总体跟log4j一样,不会有太多生疏感 ...
- HTML5+CSS3新增内容总结!!!!!绝对干货
说到H5C3会不会觉得东西好多啊,今天就整理了一份总结性的内容: CSS3选择器有哪些?答:属性选择器.伪类选择器.伪元素选择器.CSS3新特性有哪些?答:1.颜色:新增RGBA,HSLA模式 文字阴 ...
- org.apache.axis2.AxisFault: Service class XXXXX must have public as access Modifier解决方案
使用Axis2工具生成客户端调用辅助类后,编写客户端调用代码运行时报错,完整错误信息如下: log4j:WARN No appenders could be found for logger (org ...
- Android 8.0 NotificationChannel 采坑实例
Android O 上Notification的新特性: 通知通道功能 1. 简介: 通知通道功能使开发者管理自己应用的通知成为一个组或者一个通道,用户可以通过通知通道完成设置通知,如:阻止所有通知, ...
- Notepad++设计Tab制表符为4个空格
Notepad++中,常常需要将一个Tab制表符转换成4个空格.这种情况大多发生在对空白检查严格的情况下,比如Python程序. 设置 → 首选项 → 制表符设置 → 勾选“ 转换为空格 ”.
- mongodb-3.2.8 单机复制集安装
规划: replSet 复制集名称: rs1 MongoDB数据库安装安装路径为:/usr/local/mongodb/ 复制集成员IP与端口: 节点1: localhost:28010 (默认的 ...