jdbc简单封装 4

  1. package frame.service;   
  2.   
  3. import java.io.Serializable;   
  4. import java.lang.reflect.InvocationHandler;   
  5. import java.lang.reflect.InvocationTargetException;   
  6. import java.lang.reflect.Method;   
  7. import java.lang.reflect.Proxy;   
  8. import java.sql.SQLException;   
  9. import frame.dao.ConnectionFactory;   
  10.   
  11. public class ServiceProxy implements InvocationHandler, Serializable {   
  12.  private static final long serialVersionUID = 8551961343720037050L;   
  13.  public static final String FIND = "find";   
  14.  public static final String COUNT = "count";   
  15.  public static final String GET = "get";   
  16.  public static final String LOAD = "load";   
  17.  public static final String CREATE = "create";   
  18.  private Object service;   
  19.  private ServiceProxy(Object service) {   
  20.   this.service = service;   
  21.  }   
  22.  public static Object newInstance(Object obj) {   
  23.   return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(),   
  24.     new ServiceProxy(obj));   
  25.  }   
  26.  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {   
  27.   String methodName = method.getName();   
  28.   if (methodName.startsWith(FIND) || methodName.startsWith(COUNT) || methodName.startsWith(GET)   
  29.     || methodName.startsWith(LOAD)) {   
  30.    return this.invoke(method, args);   
  31.   }   
  32.   return this.transactionInvoke(method, args);   
  33.  }   
  34.  /**  
  35.   * 事务Service调用  
  36.   *   
  37.   * @param method  
  38.   * @param args  
  39.   * @return  
  40.   * @throws IllegalArgumentException  
  41.   * @throws IllegalAccessException  
  42.   * @throws InvocationTargetException  
  43.   * @throws Exception  
  44.   */  
  45.  private Object transactionInvoke(Method method, Object[] args) throws IllegalArgumentException,   
  46.    IllegalAccessException, InvocationTargetException, Exception {   
  47.   Object res = null;   
  48.   try {   
  49.    ConnectionFactory.beginTransaction();   
  50.    res = method.invoke(service, args);   
  51.    ConnectionFactory.commit();   
  52.   }   
  53.   catch (Exception e) {   
  54.    try {   
  55.     ConnectionFactory.rollback();   
  56.    }   
  57.    catch (Exception e1) {   
  58.     e1.printStackTrace();   
  59.    }   
  60.    e.printStackTrace();   
  61.    throw new Exception(e);   
  62.   }   
  63.   finally {   
  64.    try {   
  65.     ConnectionFactory.closeConnection();   
  66.    }   
  67.    catch (SQLException e) {   
  68.     e.printStackTrace();   
  69.    }   
  70.   }   
  71.   return res;   
  72.  }   
  73.  /**  
  74.   * 非事务Service调用  
  75.   *   
  76.   * @param method  
  77.   * @param args  
  78.   * @return  
  79.   * @throws IllegalArgumentException  
  80.   * @throws IllegalAccessException  
  81.   * @throws InvocationTargetException  
  82.   * @throws Exception  
  83.   */  
  84.  private Object invoke(Method method, Object[] args) throws IllegalArgumentException, IllegalAccessException,   
  85.    InvocationTargetException, Exception {   
  86.   Object res = null;   
  87.   try {   
  88.    res = method.invoke(service, args);   
  89.   }   
  90.   catch (Exception e) {   
  91.    e.printStackTrace();   
  92.    throw new Exception(e);   
  93.   }   
  94.   finally {   
  95.    try {   
  96.     ConnectionFactory.closeConnection();   
  97.    }   
  98.    catch (SQLException e) {   
  99.     e.printStackTrace();   
  100.    }   
  101.   }   
  102.   return res;   
  103.  }   
  104. }     

 

 

  1. package frame.service;   
  2.  
  3.   
  4. import org.springframework.context.ApplicationContext;   
  5. import frame.page.HtmlPage;   
  6.   
  7. public class ServiceLocator {   
  8.     public static ApplicationContext ctx = null;   
  9.     private ServiceLocator() {   
  10.     }   
  11.     public static IService getService(String serviceName) {   
  12.         return (IService) ctx.getBean(serviceName);   
  13.     }   
  14.     public static IService getServiceProxy(String serviceName) {   
  15.         Object obj = null;   
  16.         try {   
  17.             obj = ctx.getBean(serviceName);   
  18.         }   
  19.         catch (Exception e) {   
  20.             System.out.println(e.toString());   
  21.         }   
  22.         return (IService) ServiceProxy.newInstance(obj);   
  23.     }   
  24.     public static HtmlPage getPage(String page) {   
  25.         return (HtmlPage) ctx.getBean(page);   
  26.     }   
  27. }  

通过ServiceLocator.getServiceProxy(String beanname);获得一个具有事务或者是非事务的服务代理,进行逻辑操作。

你可能感兴趣的:(exception,object,jdbc,service,null,import)