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)  編輯  收藏


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


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 霍邱县| 勃利县| 汉寿县| 罗源县| 桐城市| 班戈县| 临朐县| 临湘市| 平凉市| 乐东| 论坛| 元氏县| 元江| 秀山| 称多县| 甘肃省| 拉孜县| 怀集县| 莱芜市| 乌审旗| 麻栗坡县| 杂多县| 汕头市| 怀集县| 乌海市| 于田县| 临沭县| 容城县| 清远市| 信丰县| 察雅县| 阿巴嘎旗| 罗平县| 绥中县| 新乡县| 凤凰县| 安多县| 定边县| 水富县| 竹北市| 深州市|