java學習

          java學習

           

          設計模式之cglib的動態代理

          cglib的動態生成的代理對象是目標類的子類。
          public class Classes implements Serializable{
          private Long cid;
          public Long getCid() {
          return cid;
          }
          public void setCid(Long cid) {
          this.cid = cid;
          }
          public String getCname() {
          return cname;
          }
          public void setCname(String cname) {
          this.cname = cname;
          }
          public String getDescription() {
          return description;
          }
          public void setDescription(String description) {
          this.description = description;
          }
          private String cname;
          private String description;
          }
          public interface ClassesDao {
          public void saveClasses(Classes classes);
          }
          public class ClassesDaoImpl implements ClassesDao{
          @Override
          public void saveClasses(Classes classes) {
          System.out.println("保存");
          }
          }
          public class ClassesDaoInterceptor implements MethodInterceptor {
          private Object target;
          private MyTransaction myTransaction;
          public ClassesDaoInterceptor(Object target, MyTransaction myTransaction) {
          this.target = target;
          this.myTransaction = myTransaction;
          }
          public Object create() {
          Enhancer en = new Enhancer();
          en.setSuperclass(target.getClass());
          en.setCallback(this);
          return en.create();
          }
          @Override
          public Object intercept(Object proxy, Method method, Object[] args,
          MethodProxy arg3) throws Throwable {
          System.out.println(proxy.getClass().getName());
          System.out.println(arg3.getSuperName());
          if (method.getName().equals("saveClasses")
          || method.getName().equals("updateClasses")) {
          this.myTransaction.beginTransaction();// ??
          method.invoke(this.target, args);// ?????
          this.myTransaction.commit();
          } else {
          method.invoke(this.target, args);
          }
          return null;
          }
          }
          public class MyTransaction {
          public void beginTransaction(){
          System.out.println("開始事務");
          }
          public void commit(){
          System.out.println("提交事務");
          }
          }
          public class ClassesDaoTest {
          public static void testSaveClasses(){
          Object dao = new ClassesDaoImpl();
          MyTransaction myTransaction = new MyTransaction();
          ClassesDaoInterceptor interceptor = new ClassesDaoInterceptor(dao, myTransaction);
          ClassesDaoImpl proxyDao= (ClassesDaoImpl) interceptor.create();
          Classes classes = new Classes();
          classes.setCname("aaaa");
          proxyDao.saveClasses(classes);
          }
          public static void main(String[] args) {
          testSaveClasses();
          }
          }

          posted on 2017-09-14 15:41 楊軍威 閱讀(132) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安陆市| 石屏县| 荥阳市| 射阳县| 灌阳县| 青海省| 郯城县| 通化县| 渑池县| 荣成市| 朔州市| 兰考县| 长沙县| 长乐市| 治县。| 资源县| 监利县| 霍林郭勒市| 莎车县| 都兰县| 万宁市| 青川县| 称多县| 镇坪县| 瑞金市| 刚察县| 许昌市| 高邑县| 恩平市| 怀远县| 博客| 黔东| 卢氏县| 筠连县| 拜泉县| 获嘉县| 库车县| 阜平县| 济宁市| 织金县| 德昌县|