liaofeng_xiao
liaofeng_xiao
2010-04-19 00:09

Spring

已采纳

求关于这句话的解释~~
《精通Spring2.x》第八章中的一句话:Spring面向DAO制定了一个通用的异常体系,屏蔽具体持久化技术的异常,是业务层和具体的持久化技术达到解耦。

  本人不知道这里怎么就实现解耦了。。。

谢谢!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • mafangling mafangling 11年前

    运行的结果:[code="java"]
    添加方法
    com.lyx.util.MySqlException: 持久层化异常
    at com.lyx.dao.impl.UserDaoImpl.add(UserDaoImpl.java:21)
    at com.lyx.services.impl.UserServicesImpl.add(UserServicesImpl.java:20)
    at com.lyx.test.TestDemo.main(TestDemo.java:21)
    com.lyx.util.MySqlException: 持久层化异常
    删除方法
    at com.lyx.dao.impl.UserDaoImpl.delete(UserDaoImpl.java:28)
    at com.lyx.services.impl.UserServicesImpl.delete(UserServicesImpl.java:25)
    at com.lyx.test.TestDemo.main(TestDemo.java:27)
    更新方法
    Exception in thread "main" com.lyx.util.DaoException: dao层异常信息
    at com.lyx.dao.impl.UserDaoImpl.update(UserDaoImpl.java:43)
    at com.lyx.services.impl.UserServicesImpl.update(UserServicesImpl.java:31)
    at com.lyx.test.TestDemo.main(TestDemo.java:28)
    [/code]

    点赞 评论 复制链接分享
  • mafangling mafangling 11年前

    原理:
    按照 要求 异常应该是由底层往上层逐级抛出的。底层不处理异常 , 让在最终的层处理异常。持久层的异常有业务层处理 。
    这样的话 业务层就与持久层的异常产生的耦合。
    spring 的方案是在持久层层时 处理处理异常 , 处理的方式 是 在 catch 语句中抛出spring 定义的异常。

    看代码:
    [code="java"]
    package com.lyx.util;

    /**

    • @author 李亚希
    • 2010-4-19
    • MySqlException.java
    • 模拟底层的 持久化层的异常。
      */
      @SuppressWarnings("serial")
      public class MySqlException extends Exception {

      public MySqlException(String message) {
      super(message);
      }

      @Override
      public String getMessage() {

      return super.getMessage();
      

      }
      }

    /**

    • */ package com.lyx.util;

    /**

    • @author 李亚希
    • 2010-4-19
      *DaoException.java
      *模拟 -- Spring面向DAO制定了一个通用的异常体系,屏蔽具体持久化技术的异常
      */
      @SuppressWarnings("serial")
      public class DaoException extends RuntimeException {

      public DaoException(String message) {
      super(message);
      }

      @Override
      public String getMessage() {

      return super.getMessage();
      

      }

    }
    package com.lyx.dao;

    import com.lyx.util.MySqlException;

    public interface IUserDaoInterface {

    public abstract void add() throws MySqlException;
    
    public abstract void delete();
    
    public abstract void update();
    

    }
    /**

    • */ package com.lyx.dao.impl;

    import com.lyx.dao.IUserDaoInterface;
    import com.lyx.util.DaoException;
    import com.lyx.util.MySqlException;

    /**

    • @author 李亚希
    • 2010-4-19
      *UserDaoImpl.java
      *
      */
      public class UserDaoImpl implements IUserDaoInterface {

          public    void  add()  throws MySqlException
           {
                      System.out.println("添加方法");
                      throw  new MySqlException("持久层化异常");
           }
      
          public  void    delete()
           {   
               System.out.println("删除方法");
          try {
                  throw  new MySqlException("持久层化异常");
              } catch (MySqlException e) {
      
                  e.printStackTrace();
              }
      
           }
      
          public  void    update()
           {
               System.out.println("更新方法");
          try {
                  throw  new MySqlException("持久层化异常");
              } catch (MySqlException e) {
                  throw  new  DaoException("dao层异常信息");
              }
      
           }
      

      }

    package com.lyx.services;

    import com.lyx.util.MySqlException;

    /**

    • @author 李亚希
    • 2010-4-19
      *IUserServices.java
      *
      */
      public interface IUserServices {
      public abstract void add() throws MySqlException;

      public abstract void delete();

      public abstract void update();
      }

    package com.lyx.services.impl;

    import com.lyx.dao.IUserDaoInterface;
    import com.lyx.dao.impl.UserDaoImpl;
    import com.lyx.services.IUserServices;
    import com.lyx.util.MySqlException;

    /**

    • @author 李亚希
    • 2010-4-19
    • UserServicesImpl.java
      */
      public class UserServicesImpl implements IUserServices{

      IUserDaoInterface dao=new UserDaoImpl();
      @Override
      public void add() throws MySqlException {

      dao.add();
      

      }

      @Override
      public void delete() {
      dao.delete();

      }

      @Override
      public void update() {
      dao.update();

      }

    }
    /**

    • */ package com.lyx.test;

    import com.lyx.services.IUserServices;
    import com.lyx.services.impl.UserServicesImpl;
    import com.lyx.util.MySqlException;

    /**

    • @author 李亚希
    • 2010-4-19
      *TestDemo.java
      *
      */
      public class TestDemo {

      public static void main(String[] args) {
      IUserServices us=new UserServicesImpl();
      try {
      us.add();
      } catch (MySqlException e) {

          e.printStackTrace();
      }
      
      us.delete();
      us.update();
      

      }

    }

    [/code]

    点赞 评论 复制链接分享

相关推荐