【Spring】IOC xml配置注入方式

spring有多种依赖注入的形式,下面仅介绍spring通过xml进行IOC配置的方式:

一、Setter注入

set注入是最简单常用的注入方式

package com.lhk.spring.demo1;
/**
 * setter方法的属性注入
 */
public class Car2 {
	private String name;
	private Double price;

	public void setName(String name) {
	    this.name = name;
	}
	
	public void setPrice(Double price) {
	    this.price = price;
	}

	@Override
	public String toString() {
	    return "Car2 [name=" + name + ", price=" + price + "]";
	}
}

然后编写spring的xml文件:

<!-- setter方式注入 -->
    <bean id="car2" class="com.lhk.spring.demo1.Car2">
        <property name="name" value="奔驰"></property>
        <property name="price" value="500000"></property>
    </bean>

<bean>中的id属性是bean的标识,必须唯一。class属性是类的完全限定名,指明由哪个类来实例化。

<property>标签中的name就是就是注入方法名去掉前面的set,剩下的这一截首字母大小写可不限。ref指向要注入的对象(id)。对象是引用实例,所以要用ref,如果是传值,则用value。

另外要注意的是:property name只和注入方法名相关,和内部属性名没有关系。

 

测试方法:

@org.junit.Test
    public void TestDemo2(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        Car2 car2 = (Car2) ctx.getBean("car2");
        System.out.println(car2);
    }

输出结果:

Car2 [name=奔驰, price=500000.0]

 

二、构造器注入

package com.lhk.spring.demo1;
/**
 * 构造器方法的属性注入
 */
public class Car {
	private String name;
	private Double price;

	public Car(String name, Double price) {
		super();
		this.name = name;
		this.price = price;
	}

	@Override
	public String toString() {
		return "Car [name=" + name + ", price=" + price + "]";
	}

}

然后编写Spring的XML文件:

配置xml文件,spring提供了几种方法:

1、指定参数名

<!-- 构造器方式注入 -->
    <bean id="car" class="com.lhk.spring.demo1.Car">
        <constructor-arg name="name" value="宝马"></constructor-arg>
        <constructor-arg name="price" value="1000000"></constructor-arg>
    </bean>

<constructor-arg>顾名思义就是构造函数的参数,name为要注入参数的名字,value为要注入的值。

2、智能识别

<!-- 构造器方式注入 -->
    <bean id="car" class="com.lhk.spring.demo1.Car">
        <constructor-arg value="宝马"></constructor-arg>
        <constructor-arg value="1000000"></constructor-arg>
    </bean>

<constructor-arg>没有别的属性。Spring这时会先按类型排序,同类型的按先后顺序向构造函数参数赋值。所以如果完全按照构造函数的参数顺序写,肯定是没有问题的。上面这样写,也是没有问题的,两个String类型的参数顺序对了就行。

3、指定参数类型

<!-- 构造器方式注入 -->
    <bean id="car" class="com.lhk.spring.demo1.Car">
        <constructor-arg type="String" value="宝马"></constructor-arg>
        <constructor-arg type="String" value="1000000"></constructor-arg>
    </bean>

和智能识别一样,Spring会先按类型区分,同类型的按先后顺序向构造函数参数赋值。

4、指定索引index

<!-- 构造器方式注入 -->
    <bean id="car" class="com.lhk.spring.demo1.Car">
        <constructor-arg index="0" value="宝马"></constructor-arg>
        <constructor-arg index="1" value="1000000"></constructor-arg>
    </bean>

指定的索引顺序一定要和类型匹配,不然会报错。构造函数有2个相同类型的参数,指定索引可以解决此种情况。 
注意index是从0开始。

测试方法:

@org.junit.Test
	public void TestDemo1(){
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		Car car = (Car) ctx.getBean("car");
		System.out.println(car);
	}

测试结果:

Car [name=宝马, price=1000000.0]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章