10、Spring- XML-依赖注入

一、概要

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 + '\'' +
                '}';
    }
}

    
    
    



    
   
   
   



    
   
   
   

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实例时,这个时候需要使用元素。使用元素可以指定如下两个属性。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;
    }
}

      


Spring容器根据name调用setter方法:name对应“set”关键字后面的属性名,name="detail"对应于setDetail。

你可能感兴趣的:(10、Spring- XML-依赖注入)