10、Spring- XML-依赖注入

2019-09-18  本文已影响0人  唯老

一、概要

XML配置文件中,在bean的定义中可配置该bean的依赖项,通常使用的配置方式有2种

二、构造函数注入

说明

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。

上一篇 下一篇

猜你喜欢

热点阅读