耦合度简单介绍和有关Spring的解耦问题

    技术2024-05-11  187

    如果没有使用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来管理,在后续的使用过程中,就不要自己创建对象了,而是获取对象就好!

    Processed: 0.025, SQL: 9