1.3.1 Spring依赖注入
依赖注入:它是Spring框架IOC的具体实现
好处:降低耦合度
如何将UserDao层注入到UserService层?
- set方法
- 构造方法
Set方法:
1.在UserServiceImpl中建立Userdao对象,并添加对象的set方法
public class UserService{
private UserDao userDao;
public void setUserDao(UserDao userDao){
this.userDao=userDao;
}
public void save(){
userDao.save();
}
}
2.在xml的userServiceImpl对象下设置property属性
<bean id=”userDao“ class="com.itheima.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<!-- 前一个userDao为set后首字母小写的函数名,后一个ref中的userDao为引用对象userDao>
<property name="userDao" ref="userDao"></property>
</bean>
3.此时在测试方法中创建Userservice对象,测试其功能
public static void main(){
ApplicationContext app=new ClassPathXmlApplicationContext("applicaiton");
UserService service=(UserService)app.getBean("userService");
service.save();
}
注意,此时直接创建UserService对象,会导致空指针异常
public static void main(){
//由于不是从Spring容器中取出,所以userDao没有被赋值,为null
UserService service=new UserServiceImpl();
service.save();
}
构造方法:
1.在UserServiceImpl中传递含UserDao参数的构造方法
public class UserServiceImpl{
private UserDao userDao;
public UserServiceImpl(UserDao userDao){
this.userDao=userDao;
}
public void save(){
userDao.save();
}
}
2.在xml的userServiceImpl对象下设置constructor-arg属性
<bean id=”userDao“ class="com.itheima.dao.impl.UserDaoImpl"></bean>
<bean id="userServiceImpl" class="com.itheima.service.impl.UserServiceImpl">
<!-- 第一个userDao为传递的参数名称,ref的userDao为引用前面的类型
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
3.此时在测试方法中创建Userservice对象,测试其功能
public static void main(){
ApplicationContext app=new ClassPathXmlApplicationContext("applicaiton");
UserService service=(UserService)app.getBean("userService");
service.save();
}