Spring依赖注入的方式

Jul 5, 2017


依赖注入的方式

  1. constructor-arg:通过构造函数注入
  2. property:通过set方法注入

constructor-arg

Java代码:

public class Man {

	private String name;
	private int age;
	private List<String> hobby;
	private Map<String, String> friends;
	private Set<String> set;
	private boolean ifMarried;

	public Man() {

	}

	public Man(String name, int age, List<String> hobby, Map<String, String> friends, Set<String> set,boolean ifMarried) {
		this.name = name;
		this.age = age;
		this.hobby = hobby;
		this.friends = friends;
		this.set = set;
		this.ifMarried = ifMarried;
	}

	public String getInfo() {
		String info = "姓名:" + this.name + "\n年龄:" + this.age + "\n爱好:" + this.hobby + "\n朋友:" + this.friends + "\n婚否:" + this.ifMarried + "\n其他的:" + this.set;
		return info;
	}
}

xml配置:

<bean id="man" class="com.spring.test.man.Man">  
	<constructor-arg value="lin" index="0" >  
	</constructor-arg>  
	<constructor-arg value="10" index="1">  
	</constructor-arg>  
	<constructor-arg>  
		<list>  
			<value>movie</value>  
			<value>music</value>  
		</list>  
	</constructor-arg>  
	<constructor-arg>  
		<set>  
			<value>Lady is GaGa</value>  
			<value>GaGa is Lady</value>  
		</set>  
	</constructor-arg>  
	<constructor-arg>  
		<map>  
			<entry key="liuhua" value="man"></entry>  
			<entry key="xujinglei" value="female"></entry>  
		</map>  
	</constructor-arg>  
	<constructor-arg index="5" value="0">  
	</constructor-arg>  
</bean> 

boolean 类型的参数,在配置的时候可以是true/false或者0/1
constructor-arg 标签可以通过 type 属性区分调用哪一个构造方法 constructor-arg 标签可以通过 name 属性指定给那个参数赋值

property

Java代码:

public class Doctor {

	private String name;
	private String sex;

	public String getName() {
		return name;
	}

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

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public void init() {
		System.out.println("88888888888");
	}

	public void init(String name, String sex) {
		this.name = name;
		this.sex = sex;
	}
}

xml配置:

<bean id="doctor" class="com.spring.test.man.Doctor" init-method="init">  
	<property name="name" value="doctor"></property>  
	<property name="sex" value="i don't know"></property>  
</bean> 

配置一个 init-method=”init” 表示在容器实例化这个doctor的时候,调用一个Doctor类的init方法
但是,这个init方法不能带参数