1、java代码中属性注入的三种方式
(1)使用set方法注入
public class User(){
private String username;
public void setuserName(String userName){
this.username = userName;
}
}
User user = new User();
user.setuserName("abc");
(2)有参构造注入
public class User(){
private String username;
public User(String userName){
this.username = userName;
}
}
User user = new User("abc");
(3)使用接口注入
public interface Dao(){
public void delete(String username);
}
public class DaoImpl implements Dao(){
private String username;
public void delete(String username){
this.username = username;
}
}
2、Spring支持前两种属性注入
(1)set方法注入(重点)
<!-- 使用set方法注入属性 -->
<bean id="user" class="cn.jieou.spring.user">
<!-- 注入属性
name属性值:类里面定义的属性名
value属性:设置具体的值
-->
<property name="username" value="MJ_USERNAME"></property>
</bean>
(2)有参数构造注入
<!-- 使用有参数构造注入属性 -->
<bean id="user" class="cn.jieou.spring.user">
<!-- 使用有参构造注入 -->
<constructor-arg name="username" value="MJ_USERNAME"></constructor-arg>
</bean>
3、注入对象类型属性
<!-- 注入对象类型属性 -->
<!-- 1、配置service和dao对象 -->
<bean id="userDao" class="cn.jieou.spring.UserDao"></bean>
<bean id="userService" class="cn.jieou.spring.UserService">
<!-- 注入dao对象
name属性值:service类里面属性名称
现在不要写value属性,因为刚刚是字符串,现在是对象
写ref属性:dao配置bean标签中id的值
-->
<property name="userDao" ref="userDao"></property>
</bean>
4、小结
依赖注入降低了依赖和被依赖类型间的耦合,在修改被依赖的类型实现时,不需要修改依赖类型的实现,同时,对于依赖类型的测试,可以更方便的使用mocking object替代原有的被依赖类型,以达到对依赖对象独立进行单元测试的目的。最后需要注意的是,依赖注入只是控制反转的一种实现方式。控制反转还有一种常见的实现方式称为依赖查找。