一、Setter注入
Setter注入顾名思义,被注入的属性需要有set方法,对象注入使用<property>的ref属性。
public class CustomerServiceImpl implements ICustomerService{
private String a;
private int b;
private Date c;
//以上三个成员,没有实际意义,只是用于演示注入。
public void setA(String a) {
this.a = a;
}
public void setB(int b) {
this.b = b;
}
public void setC(Date c) {
this.c = c;
}
@Override
public void saveCustomer() {
System.out.println("业务层调用持久层"+a+","+b+","+c);
}
}
配置:xml文件
<!-- 使用set方法注入 -->
<bean id="customerService2" class="com.lixin.service.impl.CustomerServiceImpl2">
<property name="a" value="lixin"></property>
<property name="b" value="222"></property>
<property name="c" ref="datee"></property>
</bean>
二、构造器注入
构造注入也就是通过构造方法注入依赖,构造函数的参数一般情况下就是依赖项,spring容器会根据bean中指定的构造函数参数来决定调用那个构造函数。
public class CustomerServiceImpl implements ICustomerService{
private String a;
private int b;
private Date c;
//以上三个成员,没有实际意义,只是用于演示注入。
public CustomerServiceImpl(String a, int b, Date c) {
super();
this.a = a;
this.b = b;
this.c = c;
}
@Override
public void saveCustomer() {
System.out.println("业务层调用持久层"+a+","+b+","+c);
}
}
配置:xml文件
<!-- 构造函数注入:
涉及的标签:constructor-arg
标签的属性:
type:指定参数的类型
index:指定参数的索引位置,从0开始
name:指定参数的名称。 一般用它
==========上面三个属性是指定给哪个参数赋值,下面两个属性是指定赋什么值得================
value:指定基本数据类型或String类型的数据
ref:指定其他bean类数据
标签出现的位置:
写在bean标签内部
-->
<!-- 配置资源:把对象的创建交给spring来管理 -->
<bean id="datee" class="java.util.Date"></bean>
<bean id="customerService" class="com.lixin.service.impl.CustomerServiceImpl">
<constructor-arg name="a" value="lixin"></constructor-arg>
<constructor-arg name="b" value="1"></constructor-arg>
<constructor-arg name="c" ref="datee"></constructor-arg>
</bean>
三、静态工厂/实例工厂的方法注入
此方法不常使用,故不做介绍