一,构造注入
1,简介
构造注入是指,在构造调用者实例的同时,完成被调用者的实例化。即使用构造器设置依赖关系。
2,特点
通过构造方法实现
灵活性差,仅靠重载限制太多
时效性好
通过匹配的构造方法实例化,但建议保留无参构造
3,注意事项
1、一个<constructor-arg>元素表示构造方法的一个参数,且使用时不区分顺序。
2、通过<constructor-arg>元素的index 属性可以指定该参数的位置索引,位置从0 开始。
3、<constructor-arg>元素还提供了type 属性用来指定参数的类型,避免字符串和基本数据类型的混淆。
4,代码演示
输入参数内容
<bean class="com.spring1.aop.dao.impl.UserDaoImpl" id="userDao"></bean>
<bean class="com.spring1.aop.service.impl.UserServiceImpl" id="userService">
<!--构造器注入ref输入参数内容-->
<constructor-arg ref="userDao"></constructor-arg>
</bean>
输入参数序号
<bean class="com.spring1.aop.dao.impl.UserDaoImpl" id="userDao"></bean>
<bean class="com.spring1.aop.service.impl.UserServiceImpl" id="userService">
<constructor-arg index="0" value="第一个参数"></constructor-arg>
<constructor-arg index="1" value="第二个参数"></constructor-arg>
</bean>
二,设值注入
1,简介
就是IoC容器使用成员变量的setter方法来注入被依赖对象,这种方式比较简单和直观。
2,特点
通过setter访问器实现
灵活性好,但setter方法数量较多
时效性差
通过无参构造实例化
3,代码演示
利用上一个文章的打印机案例代码演示
<!--墨盒组件-->
<bean id="blackAndWhite" class="com.spring1.ioc.demo2.ink.impl.BlackAndWhite"></bean>
<bean class="com.spring1.ioc.demo2.ink.impl.Color" id="color"></bean>
<!--纸张组件-->
<bean class="com.spring1.ioc.demo2.paper.impl.A4" id="a4"></bean>
<bean class="com.spring1.ioc.demo2.paper.impl.B5" id="b5"></bean>
<!--打印机组件-->
<bean class="com.spring1.ioc.demo2.Print" id="print">
<property name="paper" ref="a4"></property>
<property name="ink" ref="blackAndWhite"></property>
</bean>
三,使用p命名空间注入属性值
1,使用前需引入p命名空间
xmlns:p="http://www.springframework.org/schema/p"
2,特点
使用属性而不是子元素的形式配置Bean的属性,从而简化了配置代码
3,代码演示
public class User {
private String name;
private String pass;
private String age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
使用p命名空间注入
<!--p命名注入,需要set方法支持-->
<bean class="com.spring1.aop.bean.User" p:name="张三" p:age="18" p:address="西安市" p:pass="123456" ></bean>