Spring

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

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

谢谢!

运行的结果:[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]

原理:
按照 要求 异常应该是由底层往上层逐级抛出的。底层不处理异常 , 让在最终的层处理异常。持久层的异常有业务层处理 。
这样的话 业务层就与持久层的异常产生的耦合。
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]