Bean注入的方式 (一)一种是在XML中配置,此时分别有属性注入、构造函数注入和工厂方法注入;
(二) 另一种则是使用注解的方式注入 @Autowired,@Resource,@Required。
(一)
【实体类】注:在配置xml过程中不同的注入方式需要配置不同的空间,标签比如aop
public class Person {
private String name;
private String sex;
private Date birthday;
public void Person(String name,String sex,Data birthday)
{
this.name = name;
this.sex = sex;
this.birthday = birthday;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
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 String toString(){
return "name: " + name + "/nsex: " + sex + "/nbirthday: " + birthday.toLocaleString();
}
(1)属性注入
属性注入即通过setXxx()方法注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入是实际应用中最常采用的注入方式。属性注入要求Bean提供一个默认的构造函数,并为需要注入的属性提供对应的Setter方法。Spring先调用Bean的默认构造函数实例化Bean对象,然后通过反射的方式调用Setter方法注入属性值。
【xml】
<bean id="dt" class="java.util.Date"></bean>
<bean id="person" class="model.Person">
<property name="name" value="sunxing007" />
<property name="sex" value="M" />
<property name="birthday" ref="dt" />
</bean>
//ref的意思就是参考到另一个bean.
(2)构造函数注入
使用构造函数注入的前提是Bean必须提供带参数的构造函数
【xml】注:需要注意的是, 你给出的构造参数顺序要与构造函数一致.因为构造函数可以由多个
<bean id="dt" class="java.util.Date"></bean>
<bean id="person" class="model.Person">
<constructor-arg index="0" value="000002" />
<constructor-arg index="1" value="M" />
<constructor-arg index="2" ref="dt" />
</bean>
(3)工厂方法注入
如果我们为Person 提供一个工厂专门生产Person,一个方法可以是静态/动态的PersonFactory
【工厂方法PersonFactory工厂】
public class PersonFactory {
//动态
public Person createJavaBook(){
//一个Date对象
Date da = new Date();
Person pon = new Person();
pon .setName("001");
pon .setSex("M");
pon .setBirthday(da);
return pon;
}
//静态
public static Person createPerson(){
//一个Date对象
Date da = new Date();
return new Book("name1","M",da);
}
}
【xml】
<bean id="Factory" class="model.factory.PersonFactory"></bean>
<bean id="myPerson" factory-bean="Factory" factory-method="createJavaPerson"></bean>
(二)注解的方式注入 @Autowired,@Resource,@Required
链接《https://my.oschina.net/u/2937897/blog/910739》