1.<beans>
<beans>是Spring XML配置文件最顶层的元素,<beans></beans>中可以包含一个<description>和多个<bean>、<import>、<alias>
beans的属性
beans可以对其包含的bean进行统一的默认设置,主要属性有:
default-lazy-init:默认false。标识是否对所有bean进行延迟初始化。
default-autowire;取值为no、byName、byType、constructor或autodetect。默认值为no,标识全部bean用哪种默认绑定方式。
default-dependency-check:取值为none、objects、simple或all,默认值none,即不做依赖检查。
default-init-mothod:如果所有的<bean>都按照某种规则,都有同样名称的初始化方法,可以用这个属性指定这个初始化方法名,不用在每个<bean>上逐个指定。
default-destroy-method:类似于default-init-mothod类似,如果所有的<bean>都按照某种规则使用相同的对象销毁方法,可以通过这个属性指定。
2.<description>
在<description>中可以放置一些描述信息,一般情况下,改元素是省略的。
3.<import>
当配置文件内容较多,为了方便管理,可以把配置文件按一定的规则拆成几个文件,在加载主配置文件是可以通过<import>元素引入所引来的配置文件。比如application-main.xml配置文件中的<bean>,依赖application-control.xml的中的某些<bean>。此时就可以在application-main.xml中通过<import>application-control.xml</import>引入application-control.xml。
4.<alias>
通过<alias>元素可以给<bean>设置别名,为了减少输入。比如:有个<bean>的名字叫做dataSourceForMasterDatabase,可以通过 <alias name="dataSourceForMasterDatabase" alias="masterDataSource"/>设置别名masterDataSource,之后就可以通过这个别名来引用这个<bean>。
5.<bean>
Spring的Xml配置文件中最基本,最重要的元素,用来定义一个业务对象。比如:
<bean id="Service" class="..impl.UserService">
</bean>
id属性:
指定改业务对象在Spring容器中的唯一标识。
class属性:
指定<bean>的类型
6.<constructor-arg>
通过构造函数向被注入对象注入其所依赖的对象时,通过<constructor-arg>元素完成。例如:
<bean id="uService" class="..impl.UserService">
<constructor-arg ref="userService1"/>
<constructor-arg ref="userService2"/>
</bean>
type属性:
这个属性用来一个对象定义有多个构造函数注入的情况,例如有个类:
public class UserService {
private String dependency1;
private int dependency2;
public UserService(String dependency) {
this.dependency1 = dependency;
}
public UserService(int dependency) {
this.dependency2 = dependency;
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("dependency1", dependency1)
.append("dependency2", dependency2).toString();
}
}
以上情况,就需要通过type属性来指定通过哪个构造函数进行注入。
<bean id="myService" class="..UserService">
<constructor-arg type="int">
<value>11</value>
</constructor-arg>
</bean>
index属性:
当一个构造函数有多个注入对象时,需要通过index属性来控制注入对象的顺序,例如:
public class UserService {
private String dependency1;
private String dependency2;
public UserService(String dependency1,String dependency2) {
this.dependency1 = dependency1;
this.dependency2 = dependency2;
}
...
@Override
public String toString() {
return new ToStringBuilder(this) ➥
.append("dependency1", dependency1) ➥
.append("dependency2", dependency2).toString();
}
}
通过index属性可以控制注入对象的顺序,例如:
<bean id="uService" class="..UserService">
<constructor-arg index="1" value="11111"/>
<constructor-arg index="0" value="22222"/>
</bean>
此时,22222就会注入给dependency1,而11111注入给dependency2。
7.<property>
相对于通过<constructor-arg>来实现构造函数注入,<property>元素可以实现setter方法注入。
name属性:
<property>元素有一个name属性,用来指定该<property>将会注入的对象所对应的实例变量名称。之后通过value和ref属性或者内嵌的其他元素来指定具体的依赖引用或值。例如:
<bean id="uService" class="..UserService">
<property name="userInfo1"/>
<ref bean="UserInfo1"/>
</property>
<property name="userInfo2"/>
<ref bean="userInfo2"/>
</property>
</bean>