Posted on 2007-10-15 16:57
G_G 阅读(1155)
评论(0) 编辑 收藏 所属分类:
AOP
学习拥有连贯
在我刚认识
让 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。结果:
testDao in function : Session Open
main in function : close
4。后续
AspectJ 使 AOP 简单
可能还会统一标准
能为我们的java 框架灵活 更上一层 (期待)