Spring学习(十六)Spring Bean内容模型介绍
来源:互联网 发布:淘宝油画 莫奈的花园 编辑:程序博客网 时间:2024/05/22 17:43
本次主要介绍Spring Bean的内容模型,通过对内容模型的了解使开发者能够对Spring Bean有一个全局的认识。关于Spring Bean的详细信息可以参考spring-beans.xsd这个文件。在这里,我们只介绍一些常用的元素。
beans是spring-beans.xsd的根节点,下图给出了beans的内容模型:
先介绍下beans节点中的属性
1.default-lazy-init
在内容模型中定义为:
<!ATTLIST beans default-lazy-init (true|false)”false”>
全局设定,
作用为:确定Spring定义Java Bean是否需要延迟加载,默认值为false。
开发者可以在bean定义级别通过lazy-init属性值来覆盖beans中定义的default-lazy-init属性值。
2.default-dependency-check
在内容模型中的定义为:
<!ATTLIST beans default-dependency-check (none|objects|simple|all) “none”>
全局设定,
作用为:确定Spring是否需要对Java Bean以及Java Bean之间的依赖关系进行判断,默认值为none,即不进行依赖关系的判断。
"simple”表示需要对Java Bean中使用的java原型String来进行判读。
"objects”表示需要对Java Bean之间的依赖关系来进行判断。
"all”表示上述两个方面都需要判断。
开发者可以在bean定义级别通过dependency-check来覆盖beans中定义的default-dependency-check属性值。
3.default-autowire
在内容模型中的定义为:
<!ATTLIST beans default-autowire (none|byName|byType|constructor|autodetect) “no”>
作用为:是否借助与Spring提供的autowire功能,以注入Java Bean之间的引用关系。
即开发者不用显式的在Spring配置文件中给出Java Bean对其他Java Bean的引用。
不建议使用,其默认值也是no
"byName":根据java bean 的属性名来进行autowire的操作。
"byType":根据java bean的属性类型来进行autowire的操作。前提是在Spring BeanFactory当中仅存在单个类型的java bean定义。
"constructor":在Spring BeanFactory当中仅存在一个的constructor定义。
"autodetect":借助constructor或者byType来进行autowire的操作的。
接下来介绍一下beans的子元素:
- description:可选元素,描其所在Spring配置文件的内容描述。
- import:可选元素,用于导入其他Spring的配置文件。
- bean:用于定义Java Bean。
接下来我们对bean元素的属性以及其子元素的所有信息来进行详细的介绍:
bean元素:bean元素是Beans元素的子节点,通常用于定义Java Bean。开发者可以借助Java Bean的属性或者构建器参数来定义Java Bean
先来认识下bean元素的相关属性:
- Id:通过id来访问SpringBeanFactory中的java bean
- name: 通过name来访问SpringBeanFactory中的java bean,在某种意义上来讲name就是id的别称。
- class:java bean定义的全限定名,即包名+类名。假如配置文件中没有指定id或name的取值,那么class即作为id的取值。
- parent:如果没有指定class属性的话则可以使用parent,他们的含义是等效的。而且parent java bean 定义不仅能够继承parent当中定义的所有内容,而且还能够覆盖parent当中定义的相关内容。比如覆盖java bean方法:init、destory等内容。当然某些parent设置是不能被覆盖的,比如:依赖关系、autowire的值、作用域。
- abstract:当值为true的时候,表明相应的java bean定义只是供parent使用,其本身是不能够被实例化的。默认值为false。
- scope:bean的作用域,Spring当中提供了5种作用域。
- lazy-init:延迟加载属性,只有当用到这个bean的时候,Spring才会进行实例化。
- autowire:开发者是否使用Spring提供的autowire功能,建议不使用,默认值为no
- dependency-check:Spring是否需要对java bean 以及java bean之间的依赖关系来进行判断。定义此属性将会覆盖在beans中定义的default-dependency-check属性。
- depends-on:用于保证相应的java bean在其指定depends-on的java bean实例化之后,才去实例化使用了depends-on的java bean的本身。
- init-method:主要用于设置在实例化java bean,并设置java bean的属性之后,待执行的初始化方法。
- destroy-method:当中SpringBeanFactory销毁的时候,可以利用此方法来进行一些资源回收的操作。或者一些其他的操作,比如关闭同GMS目的地的监听以及连接。在这里请注意,指令的方法应该是参数类型。
- factory-method:指定用于创建java bean 工厂的methed方法。在Spring当中,对象的创建最好是通过bean factory来创建。
- factory-bean:指定用于创建java bean实例的工厂类。
接下来介绍bean的子元素:
1.constructor-arg
当我们为了构建java bean实例的时候,开发者可能需要对java bean来指定构造器的参数。
这与autowire中的constructor是一样的。当java bean仅存在单个构造器的时候,则可以直接使用。
如下:
在这里我们定义了一个名称为HelloWorld的java bean,他仅存在着一个构造器,而且构造器中只有一个参数,在这里我们引用的是HelliChina这个bean。
</bean><bean name="HelloWorld" class="cn.lovepi.chapter03.instance.HelloWorld"> <constructor-arg> <ref bean="HelloChina"/> </constructor-arg></bean>
那么,如果存在多个构造器参数的时候,则开发者能够通过index或者type来指定构造器参数。
其中:
inex用于指定具体参数在构建器列表当中的位置。
type用于指定具体参数的类型。
那么接下来看一看constructor-args的内容模型:可以看到他包含两个属性index和type,
其中:
inex用于指定具体参数在构建器列表当中的位置。
type用于指定具体参数的类型。
而在右边是他包含的一些子元素,
可以看到其中还有list、set、map、props这些存储对象的容器。类似与java Collection中定义的。
那么接下来详细的看一看这四个元素的基本内容模型:
List内容元素模型如下:
可以看到,他同样包含了一些子元素。
接下来,看下set元素的基本内容结构
最后,我们看到的是map元素:
2.Property
为了构建java bean实例,开发者可能需要为java bean指定属性,即借助其暴露的setter方法,下图是property其节点的内容模型:
3.lookup-method
接下来给出lookup-method的内容模型图:
4.Replace-method
Replace-method的内容模型图:
0 0
- Spring学习(十六)Spring Bean内容模型介绍
- Spring学习(十一)Bean生命周期介绍
- Spring学习(十三)Spring Bean 的命名方式介绍
- Spring学习笔记(十六):无状态 bean和有状态bean
- Spring学习(二十)Bean 的依赖关系介绍
- Spring Bean介绍
- Spring学习二:Spring管理Java Bean的容器介绍
- Spring 学习(二) Bean
- Spring学习(十四)Spring Bean 的3种实例化方法介绍
- Spring学习(十五)Spring Bean 的5种作用域介绍
- Spring学习-装配Bean
- 【Spring学习】Bean生命周期
- spring bean 声明学习
- Spring学习-装配Bean
- spring学习(-)关于bean的生命周期
- Spring学习二(Bean配置)
- Spring 学习(一)-----装配Bean
- Spring学习----Bean的装配(4)
- 智慧城市顶层设计范例:以数字家庭区块为例-P03
- 排序算法(3)-直接插入排序
- 使用 Android Studio自定义View01——注意是否重写onMeasure的区别,实现真正的自适应布局
- 面试算法总结
- 使用SQL Nexus整合----熟悉SQL Nexus
- Spring学习(十六)Spring Bean内容模型介绍
- Endless Punishment——HOJ
- leetcode-Java-202. Happy Number
- bzoj 1751 [Usaco2005 qua]Lake Counting
- SQL Server 2012内部原理及故障排除(专栏)
- 数据结构二叉树的递归遍历
- 如何让网页大小自适应的JS代码
- 凸优化性质的证明
- ExpandableListView使用心得