posts - 165, comments - 198, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

我的AOP学习(AspectJ)

Posted on 2007-10-15 16:57 G_G 阅读(1137) 评论(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 框架灵活 更上一层 (期待)



只有注册用户登录后才能发表评论。


网站导航: