三层架构:界面层,业务逻辑层,数据访问层
三层之间的交互:
用户使用界面层(Controller)—业务逻辑层(Service)—数据访问层(Dao层)----数据库(mysql)
三层对应的处理框架:
界面层------springMVC
业务逻辑层-------spring
数据访问层------mybatis
由上面的过程可以知道业务逻辑层会调用Dao层,所以我们可以直接将依赖关系的管理交给spring维护,在Service类需要用到Dao类的对象,由spring为我们提供,只需在配置文件中说明关系的维护;
所以我们需要在spring容器中注入Dao类,这样以后在调用Service层的时候会在内部连带着调用Dao层,下面介绍两种注入方法:set方法和有参构造方法
set方法注入:
xml文件里
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
UserServiceImpl类中
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao=userDao;
}
}
上边的property标签中name表示调用setUserDao方法,ref表示引用容器内部标签userDao,所以这句话的意思是,调用setUserDao方法,将容器内部的userDao作为参数传入到userServiceImpl中。这样也就完成了依赖注入。
有参构造方法注入
xml文件中
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao"/>
</bean>
UserServiceImpl类中
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServiceImpl(UserDao userDao) {
this.userDao=userDao;
}
public UserServiceImpl() {
}
}
constructor-arg标签里的name表示构造方法的参数名称,ref表示参数,所以到UserServiceImpl类中就会将userDao传入到UserServiceImpl的有参构造里面,这样也就完成了依赖注入。