Spring学习(十六)Spring Bean内容模型介绍

本次主要介绍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。
  1. </bean>
  2. <bean name="HelloWorld" class="cn.lovepi.chapter03.instance.HelloWorld">
  3. <constructor-arg>
  4. <ref bean="HelloChina"/>
  5. </constructor-arg>
  6. </bean>
那么,如果存在多个构造器参数的时候,则开发者能够通过index或者type来指定构造器参数。
其中:
inex用于指定具体参数在构建器列表当中的位置。
type用于指定具体参数的类型。
那么接下来看一看constructor-args的内容模型:

可以看到他包含两个属性indextype
其中:
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的内容模型图:

猜你喜欢

转载自blog.csdn.net/jisuanji198509/article/details/80909848