捕獲何時(shí)訪問對(duì)象的屬性
pointcut <pointcut name>(<any values to be picked up>) : get(<optional modifier> <type> <class>.<field>);
get(Signature)切入點(diǎn)不能捕獲對(duì)靜態(tài)屬性的訪問,盡管從AspectJ的語(yǔ)法角度講以這種方式定義切入點(diǎn)是完全合法的。
使用after() returning(<ReturnValue>)形式的通知,它在聲明的returning()部分中帶有一個(gè)標(biāo)識(shí)符,用于包含訪問過的值。
捕獲何時(shí)修改對(duì)象的字段
pointcut <pointcut name>(<any values to be picked up>) : set(<optional modifier> <type> <class>.<field>);
package com.eric.aspectj;
public aspect GetRecipe {
pointcut getNamePointcut() : get(String MyClass.name);
before() : getNamePointcut() {
System.out.println("-------------- Aspect Advice Logic ---------------");
System.out.println("In the advice picked by " + "getNamePointcut()");
System.out.println("Signature: " + thisJoinPoint.getStaticPart().getSignature());
System.out.println("Source Line: " + thisJoinPoint.getStaticPart().getSourceLocation());
System.out.println("--------------------------------------------------");
}
after() returning(String value) : getNamePointcut() {
System.out.println("Value being accessed is " + value);
}
}
package com.eric.aspectj;
public class MyClass {
public static final String CONSTANT = "CONSTANT STRING";
private int number;
private String name;
public String getName()
{
System.out.println("In the getName() method");
return this.name;
}
public void setName(String name)
{
System.out.println("In the setName(String) method");
this.name = name;
System.out.println("The name field has been set");
}
public int getNumber()
{
System.out.println("In the getNumber() method");
return this.number;
}
public void setNumber(int number)
{
System.out.println("In the setNumber(int) method");
this.number = number;
System.out.println("The number field has been set");
}
public static final void main(String args[])
{
MyClass myObject = new MyClass();
myObject.setName("Eric Chau");
System.out.println("The name has been set");
myObject.setNumber(88888888);
System.out.println("The number has been set");
System.out.println("Name Stored = " + myObject.getName());
System.out.println("Number Stored = " + myObject.getNumber());
System.out.println("The constant value is " + MyClass.CONSTANT);
}
}
運(yùn)行結(jié)果:
In the setName(String) method
The name field has been set
The name has been set
In the setNumber(int) method
The number field has been set
The number has been set
In the getName() method
-------------- Aspect Advice Logic ---------------
In the advice picked by getNamePointcut()
Signature: String com.eric.aspectj.MyClass.name
Source Line: MyClass.java:11
--------------------------------------------------
Value being accessed is Eric Chau
Name Stored = Eric Chau
In the getNumber() method
Number Stored = 88888888
The constant value is CONSTANT STRING
posted on 2007-07-04 14:31
周銳 閱讀(220)
評(píng)論(0) 編輯 收藏 所屬分類:
AspectJ