一、概要
XML配置文件中,在bean的定义中可配置该bean的依赖项,通常使用的配置方式有2种
- 构造函数注入
- Setter方法注入
二、构造函数注入
说明
constructor-arg 属性,根据XML中的配置,Spring容器首先创建所依赖Bean实例,然后传递给类的构造函数。通过指定构造方法的参数来实例化Bean 。
可选属性
属性 | 说明 |
---|---|
type | 根据参数的类型,避免构造方法冲突 |
value | 用于指定字符串类型、基本类型的属性值 |
name | 属性的名称 |
ref | 关联其它类型 |
index | 对应于构造函数的多个参数,index属性的值从0开始 |
栗子
public class Shop {
private ShopDetail detail;
private int shopId;
private String title;
private String name;
public Shop() {
}
// 构造方法传入 ShopDetail detail
public Shop(ShopDetail detail) {
this.detail = detail
}
public Shop(int shopId, String title) {
this.shopId = shopId;
this.title = title;
}
public Shop(String title, String name) {
this.title = title;
this.name = name;
}
public Shop(int shopId, String title, String name) {
this.shopId = shopId;
this.title = title;
this.name = name;
}
public int getShopId() {
return shopId;
}
public void setShopId(int shopId) {
this.shopId = shopId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Shop{" +
"shopId=" + shopId +
", title='" + title + '\'' +
", name='" + name + '\'' +
'}';
}
}
<bean id="shop" class="com.wener.example.bean.Shop">
<!--通过构造方法注入-->
<constructor-arg type="int" value="1"/>
<constructor-arg type="java.lang.String" value="iPhone X"/>
</bean>
<!-- 或者 -->
<bean id="shop" class="com.wener.example.bean.Shop">
<!--通过构造方法注入-->
<constructor-arg index="0" value="1"/>
<constructor-arg index='title' value="手机"/>
<constructor-arg index='2' value="iPhone X"/>
</bean>
<!--或者-->
<bean id="shop" class="com.wener.example.bean.Shop">
<!--通过构造方法注入-->
<constructor-arg name="id" value="1"/>
<constructor-arg index='1' value="手机"/>
<constructor-arg index='name' value="iPhone X"/>
</bean>
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
Shop shop = context.getBean("shop", Shop.class);
System.out.println(shop.toString());
三、Setter方法注入
说明
property属性,根据XML中的配置,Spring容器调用类的Setter方法注入依赖项。
可选属性
属性 | 说明 |
---|---|
name | 属性的名称 |
value | 主要是配置基本类型的属性值, |
ref | 但是如果我们需要为Bean设置属性值是另一个Bean实例时,这个时候需要使用<ref.../>元素。使用<ref.../>元素可以指定如下两个属性。bean:引用不在同一份XML配置文件中的其他Bean实例的id属性值。local:引用同一份XML配置文件中的其他Bean实例的id属性值 |
栗子
public class Shop {
private ShopDetail detail;
public void setDetail(ShopDetail detail) {
this.detail = detail;
}
public ShopDetail getDetail() {
return detail;
}
}
public class ShopDetail {
private String desc;
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
<bean id="shop" class="com.wener.example.bean.Shop">
<property name="detail" ref="detail"/>
</bean>
<bean id="detail" class="com.wener.example.bean.ShopDetail"></bean>
Spring容器根据name调用setter方法:name对应“set”关键字后面的属性名,name="detail"对应于setDetail。
网友评论