技术开发 频道

我的AOP学习(AspectJ)

【IT168技术文档】在我刚认识 让 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 框架灵活 更上一层

原文地址
0
相关文章