Coin163

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

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

2020腾讯云双十一活动,全年最低!!!(领取3500元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1073

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
入口地址https://www.aliyun.com/minisite/goods

       本次主要介绍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的内容模型:

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

原文

       本次主要介绍Spring Bean的内容模型,通过对内容模型的了解使开发者能够对Spring Bean有一个全局的认识。关于Spring Bean的详细信息可以参考spring-beans.xsd这个文件。在这里,我们只介

------分隔线----------------------------