如果没有使用Spring框架的时候,再项目中写Servlet的时候各组件之间是存在依赖关系的,看下面代码:
// 处理用户登录请求的Servlet组件类
public class LoginServlet {
private UserDao userDao = new UserDao();
public void doPost() {
userDao.login();
}
}
// 处理用户数据增删改查的组件
public class UserDao {
public void login() {
// 通过JDBC技术实现数据查询,判断用户名与密码是否正确
}
}
也就是说,LoginServlet的完成是依赖于UserDao的,这样的话就会导致耦合度高的问题!在UserDao中通过基本原始的JDBC来实现数据访问的,如果改为MyBatis框架技术实现的话就会创UserMybatisDao类,取代UserDao,这样的话就要大量的替换代码:
private UserDao userDao= new UserDao();
全部替换为:
private UserMybatisDao userDao = new UserMybatisDao();
这种牵一发动全身问题也就是高耦合的表现,我们需要降低耦合度,解耦!!!
将处理用户数据操作的相关声明在接口中:
public interface Dao{
void login();
}
要操作数据的类来实现这个接口:
public class UserDao implements Dao{
public void login(){
//JDBC处理的有关代码
}
}
public class UserMybatisDao implements Dao {
public void login() {
// 通过MyBatis框架技术实现处理用户登录
}
}
后续在各个Servlet组键中,就可以声明为接口类型:
private Dao dao = new UserMybatisDao();
通过以上的操作,就
实现解耦啦!
还有就是,我们可以使用工厂模式来生产类:
public class DaoFactory{
public static Dao newInstance(){
return new UserMybatisDao();
}
}
有工厂模式以后,Servlet的持久层数据创建对象的代码就可以写成:
UserDao user = DaoFactory.newInstance();
这样以后,不管是用UserDao还是UserMybatisDao,在替换时只要替换掉UserDaoFactory里面的return的对象就行了!通过定义接口喝创建工程类来解耦,实际开发中不会为每一个组键都创建工厂类的,这时就会使用Spring框架,它相当于一个庞大的工厂,将某些类的对象交给Spring来管理,在后续的使用过程中,就不要自己创建对象了,而是获取对象就好!