posts - 431,  comments - 344,  trackbacks - 0
公告
 Don't Repeat Yourself
座右铭:you can lose your money, you can spent all of it, and if you work hard you get it all back. But if you waste your time, you're never gonna get it back.
公告本博客在此声明部分文章为转摘,只做资料收集使用。


微信: szhourui
QQ:109450684
Email
lsi.zhourui@gmail.com
<2007年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

留言簿(15)

随笔分类(1019)

文章分类(3)

文章档案(21)

收藏夹

Link

好友博客

最新随笔

搜索

  •  

积分与排名

  • 积分 - 855853
  • 排名 - 47

最新评论

阅读排行榜

1.   捕获对构造函数的调用
       pointcut <pointcut name>(<any values to be picked up>) : call(<optional modifier> <class>.new(<parameter types>));

2.   在执行构造函数时捕获它
      pointcut <pointcut name>(<any values to be picked up>) : execution(<optional modifier> <class>.new(<parameter types>));

3.   捕获何时初始化对象
      pointcut <pointcut name>(<any values to be picked up>) : initialization(<optional modifier> <class>.new(<parameter types>));
      initialization(Signature)切入点必须包含new关键字,Signature必须解析成特定类的构造函数,而不是一个简单的方法。
      由于AspectJ编译器中的编译器限制,当与around()通知关联时,不能使用initialization(Signature)切入点。
      与execution(Signature)切入点相比,使用initialization(Signature)切入点最大优点是:它提供了编译时检查,以确保签名实际上制定了一个构造函数。

4.   捕获何时将要初始化一个对象
      pointcut <pointcut name>(<any values to be picked up>) : preinitialization(<optional modifier> <class>.new(<parameter types>));

5.   捕获何时初始化类
      
pointcut <pointcut name>(<any values to be picked up>) : staticinitialization(<class>);


package com.eric.aspectj;

public aspect CallNewRecipe {
 pointcut myClassConstructorWithIntAndStringPointcutStaticinitialization() : staticinitialization(MyClass);
 pointcut myClassConstructorWithIntAndStringPointcutCall() : call(MyClass.new(int, String));
 pointcut myClassConstructorWithIntAndStringPointcutExecution() : execution(MyClass.new(int, String));
 pointcut myClassConstructorWithIntAndStringPointcutPreinitialization() : preinitialization(MyClass.new(int, String));
 pointcut myClassConstructorWithIntAndStringPointcutInitialization() : initialization(MyClass.new(int, String));
 
 
 before() : myClassConstructorWithIntAndStringPointcutExecution() {
  System.out.println("-------------- Aspect Advice Logic Execution ---------------");
  System.out.println("In the advice picked by " + "myClassConstructorWithIntAndOthersPointcut()");
  System.out.println("The current type of object under construction is: ");
  System.out.println("getThis: " + thisJoinPoint.getThis());
  System.out.println("getTarget: " + thisJoinPoint.getTarget());
  System.out.println("getKind: " + thisJoinPoint.getKind());
  System.out.println("Signature: " + thisJoinPoint.getSignature());
  System.out.println("getName: " + thisJoinPoint.getSignature().getName());
  System.out.println("getDeclaringTypeName: " + thisJoinPoint.getSignature().getDeclaringTypeName());
  System.out.println("getDeclaringType: " + thisJoinPoint.getSignature().getDeclaringType());
  System.out.println("getModifiers: " + thisJoinPoint.getSignature().getModifiers());
  System.out.println("Source Line: " + thisJoinPoint.getSourceLocation());
  System.out.println("toString: " + thisJoinPoint.toString());
  System.out.println("--------------------------------------------------");
 }
 before() : myClassConstructorWithIntAndStringPointcutStaticinitialization() {
  System.out.println("--------------- Staticinitialization ------------------");
 }
 before() : myClassConstructorWithIntAndStringPointcutCall() {
  System.out.println("--------------- Call ------------------");
 }
 before() : myClassConstructorWithIntAndStringPointcutPreinitialization() {
  System.out.println("--------------- Preinitialization ------------------");
 }
 before() : myClassConstructorWithIntAndStringPointcutInitialization() {
  System.out.println("--------------- Initialization ------------------");
 }
}

package com.eric.aspectj;

public class MyClass {

 private int number;
 private String name;
 
 public MyClass(int number, String name) {
  this.number = number;
  this.name = name;
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  MyClass myObject = new MyClass(123, "Eric Chau");
 }

}

运行结果:
--------------- Staticinitialization ------------------
--------------- Call ------------------
--------------- Preinitialization ------------------
--------------- Initialization ------------------
-------------- Aspect Advice Logic Execution ---------------
In the advice picked by myClassConstructorWithIntAndOthersPointcut()
The current type of object under construction is:
getThis: com.eric.aspectj.MyClass@10d448
getTarget: com.eric.aspectj.MyClass@10d448
getKind: constructor-execution
Signature: com.eric.aspectj.MyClass(int, String)
getName: <init>
getDeclaringTypeName: com.eric.aspectj.MyClass
getDeclaringType: class com.eric.aspectj.MyClass
getModifiers: 1
Source Line: MyClass.java:8
toString: execution(com.eric.aspectj.MyClass(int, String))
--------------------------------------------------

posted on 2007-07-04 13:56 周锐 阅读(253) 评论(0)  编辑  收藏 所属分类: AspectJ

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


网站导航: