您的位置:首页 > 编程语言 > Java开发

Spring配置文件常用元素说明

2017-09-14 12:37 429 查看

Spring配置文件常用元素说明

beans 是根节点

包含属性

default-init 默认false,是否开启懒加载

default-dependency-check 默认为none

default-autowire 是否自动装配,默认为no

包含子节点

description 可选

import 包含resourse属性,引用其他配置文件

bean 定义bean

Bean

包含属性

id id名字

name name

class 必须,指定全限定名

parent,若没有指定

abstract 表示相应的javaBean定义只能作为parent使用,不能实例化

scope

lazy-init 懒加载

autowire 自动装配,不推荐

dependency-check 依赖关系的判断

depends-on 保证相应的Bean在其depends-on指定的Bean实例化之后再实例化。

init-method 指定初始化方法

destory-metho 指定销毁方法

factory-method 指定工厂方法

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配置中常用元素的理解,如有不到之处,欢迎各位大神批评指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring