Spring配置文件常用元素说明

来源:互联网 发布:php 探针 不支持mssql 编辑:程序博客网 时间:2024/04/19 14:34

Spring配置文件常用元素说明

beans 是根节点

包含属性

  1. default-init 默认false,是否开启懒加载
  2. default-dependency-check 默认为none
  3. default-autowire 是否自动装配,默认为no

包含子节点

  1. description 可选
  2. import 包含resourse属性,引用其他配置文件
  3. bean 定义bean

Bean

包含属性

  1. id id名字
  2. name name
  3. class 必须,指定全限定名
  4. parent,若没有指定
  5. abstract 表示相应的javaBean定义只能作为parent使用,不能实例化
  6. scope
  7. lazy-init 懒加载
  8. autowire 自动装配,不推荐
  9. dependency-check 依赖关系的判断
  10. depends-on 保证相应的Bean在其depends-on指定的Bean实例化之后再实例化。
  11. init-method 指定初始化方法
  12. destory-metho 指定销毁方法
  13. factory-method 指定工厂方法
  14. factory-bean 指定工厂bean

包含子节点

constructor-arg 指定构造器参数

contructor-arg 用于指定方法参数

  • 当方法是无参方法时,不需要使用该属性
  • 当被指定的方法只有一个参数时,可以直接在contructor内嵌套一个<value>标签或者<ref>标签等,用来指定相应的参数;
<bean id="***" class="***">    <contructor-arg>        <!-- 直接指定value值 -->        <value type="java.lang.String">hello</value>        <!-- 通过ref指定已经声明的bean值 -->        <ref bean="***"/>    </contructor-arg></bean>
  • 当方法有多个参数时,需要通过index方法指定参数顺序。
<bean id="***" class="***">    <bean>        <constructor-arg index="0" value="hello" type="java.lang.String"/>        <constructor-arg index="1" value="hello" type="java.lang.String"/>    </bean></bean>
在某些情况下,index可以省略,spring会根据参数的类型进行自动匹配。

* 参数也可以是一些集合类型的值,如Set,List,Map等。

<!-- list参数传入 --><constructor-arg>    <list>        <value>value1</value>        <value>value2</value>    </list></constructor-arg>
<!-- set参数传入 --><constructor-arg>    <set>        <value>value1</value>        <value>value2</value>    </set></constructor-arg>
<!-- map参数传入 --><constructor-arg>    <map>        <entry key="key1" value="value1"></entry>        <entry key="key2" value="value2"></entry>    </map></constructor-arg>

property 用于指定属性值

可以指定的类型:

  • 字面值:可用字符串进行表示的值,可以使用<value>标签进行指定,一般情况下,基本数据类型以及其封装类,String类型等,均可直接使用字面值指定。
<bean id="***" class="***">    <property name="属性1名称">        <value>hello<value>    </property>    <property name="属性2名称">        <!-- 使用CDATA来指定原样式赋值,不会破坏XML的文件结构 -->        <value><![CDATA[&<>"']]<value>    </property></bean>
  • 引用其他的Bean:可以将属性值指定为其他的bean类,使用<ref>标签
<bean id="bean1" class="***"/><bean id="bean2" class="***">    <property name="属性名">        <!--            ref可以通过以下三个属性引用其他Bean:            bean:引用该配置文件或另外一个配置文件中的bean            local:通过该属性,只能引用同一个配置文件里边的bean            parent:主要用来引用当前容器或者父容器中的bean        -->        <ref bean="bean1"/>    </property></bean>
  • 内部Bean:当Spring中的bean1被且只被bean2引用是,可以考虑将beanA设置为beanB的内部Bean。
<bean id="bean2" class="***">    <property name="***">        <bean class="***">            <property name="***" value="***"/>        </bean>    </property></bean>
  • null值:当某属性需要被指定为null值时,使用专门的<null>标签。
<bean id="***" class="***">    <property name="name1">        <!-- 空字符串,并不是null -->        <value></value>    </property>    <property name="name2">        <!-- 需要注入null的时候,需要使用null标签 -->        <null/>    </property></bean>
  • 级联属性:在定义bean1的时候,直接为bean2的属性提供注入值。Spring3.0之前的版本,如果需要使用级联注入,则必须在bean1的类中,创建bean2的对象,否则会有空指针异常。spring3.0之后,对这个问题做了改进,不需要再进行预先的实例化对象了。
<bean id="bean1" class="***">    <property name="bean2.p1">        <value>hello</value>    </property></bean>Public class Bean1{    private Bean2 bean2 = new Bean2();    /*……getter和setter方法*/}
  • 集合类型属性:spring为list、map、set、properties等集合提供了专门的配置标签,数组与list相似
<beanid="***" class="***">    <property name="***">        <list>            <value>a</value>            <value>b</value>            <value>c</value>        <list>    </property>    <property name="***">        <set>            <value>a</value>            <value>b</value>            <value>c</value>        <set>    </property>    <property name="***">        <map>            <entry>                <key><value>key1</value></key>                <value>value1</value>            </entry>            <entry>                <key><value>key2</value></key>                <value>value2</value>            </entry>        <map>    </property>    <property name="***">        <!-- properties跟map类似,区别在于其key值只能是字符串,所以相对于map的配置更简单。  -->        <props>            <prop key="key1">value1</prop>            <prop key="key2">value2</prop>            <prop key="key3">value3</prop>        <map>    </property></bean>
在Spring2.0之后,配置文件中新增了集合合并的功能,允许子<bean>继承父<bean>的同名属性集合元素并将子<bean>中配置的集合属性值和父<bean>中配置的同名属性值合并。 需要指定merge="true"。
<bean id="parentBean" class="***">    <property name="hello">        <set>            <value>吃饭</value>            <value>睡觉</value>            <value>打豆豆</value>        </set>    </property></bean><bean id="childBean" parent="parentBean">    <property name="hello">        <set merge="true">            <value>写博客</value>            <value>敲代码</value>        </set>    </property></bean>
如上代码所示,childBean的set集合中,会有吃饭、睡觉、打豆豆、写博客、敲代码五个值,当merge=false时,则不会合并父类同名属性,而是简单的覆盖。

Spring自动装配

spring使用autowire来完成bean的自动装配,auto共五个可选值,包含四种自动装配形式和一个none值,autowire属性可以通过beans标签中的default-autowire属性指定默认值,对个别不适用默认值的bean,在bean标签中使用autowire属性进行覆盖。spring一般不提倡使用自动装配,使用自动装配容易引起潜在的错误,增强调试和维护的难度。

  • none:不适用自动装配
  • byName:通过name进行自动装配,如spring容器中有一个名为house的bean,而在Person类中,恰好有个属性为house,则在实例化person类对象时,会自动装配名称为house的bean。
  • byType:同byName相似,装配按照类型,不再按照name来进行装配。
  • constructor:通过构造函数按照类型进行装配,如果容器中没有找到相应类型进行匹配,spring则会抛出异常。
  • autodetect:如果bean提供了默认的构造函数,则使用byType进行装配,如果没有则使用constructor进行装配。

    以上内容为博主个人对Spring配置中常用元素的理解,如有不到之处,欢迎各位大神批评指正。

原创粉丝点击