| 学习拥有连贯 在我刚认识 让 java 动态 这种动态编译动态加载的几天后 对我一向不懂的 AOP 特别是 AspectJ 开窍了 (哈哈 那感觉好啊^_^) 下面我写出我刚对AOP的一些小练
1。目的 DAO中大量的 session的开和闭 不紧使代码成倍加,还及容易出错 用 设计模式 hibernate 包装 下大家好象有点接受不了(@_@!) AOP就进入我的视线 但总没个切入点
2。原理 其实 让 java 动态 就是那点东西 但IBM 包出个好用的框架 来 。
3。代码说明
//*******************Dao.java **************************** package?tt; //为了简单 session 看成是 真的session 哈 ^_^ public?class?Dao?{ ????public?String?session?=?"close"?;? ???? ????public?void?testDao(){ ????????System.out.println(?"testDao?in?function?:?"+?session); ????} ???? ????static?public?void?main(String[]args){ ????????Dao?dao?=?new?Dao()?; ????????dao.testDao(); ????????System.out.println("main?in?function?:?"?+??dao.session); ????} }
//*****************List.aj **************************** package?tt;
public?aspect?List?{ ??? //切点? 范围声明? (Dao.testDao 归 readOnly切点管? ) ????pointcut?readOnly(Dao?dao):execution(*?*Dao.testDao*(..))&&this(dao);
????//挂载 readOnly 开始方法 ?????before(Dao?dao)?:??readOnly(dao)?{????????? ?????????????openSession(dao); ??????} ???? //挂载 readOnly 结束方法 ?????after(Dao?dao)?returning()??:??readOnly(dao)?{ ??????????close(dao); ?????} ???? ???? // readOnly 方法 运行代码 (到这可以大胆的写 java 代码了 ) 。。。。 ?????private?void?openSession(Dao?dao)?{ ?????????if(dao.session.equals("close")) ?????????????dao.session?=?"Session?Open"; ?????} ?????private?void?close(Dao?dao)?{ ?????????dao.session?=?"close"?; ?????} }
4。后续 AspectJ 使 AOP 简单 可能还会统一标准 能为我们的java 框架灵活 更上一层 (期待)

|