AOPFramework is released on Google Code.
Sample:
package {
import advancedflex.aop.advisor.InvocationAdvisor;
import advancedflex.aop.framework.AOPProxy;
import advancedflex.aop.framework.Advisor;
import advancedflex.aop.framework.JointPoint;
import advancedflex.aop.framework.MethodInfo;
import advancedflex.aop.framework.Pointcut;
import advancedflex.aop.pointcut.RegExpPointcut;
import advancedflex.aop.pointcut.StringPointcut;
import advancedflex.aop.proxy.StaticAOPProxy;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Transform;
import flash.utils.Dictionary;
public class AdvancedFlex extends Sprite{
public function AdvancedFlex(){
var s:Point = new Point(0,0);
var p:AOPProxy = new StaticAOPProxy(s);
var ad:InvocationAdvisor = new InvocationAdvisor();
ad.aroundAdvice = function(method:MethodInfo, join:JointPoint):void {
trace("#begin","name :", method.name,"args :", method.args, "result :", method.result);
join.proceed(method);
trace("@end","name :", method.name,"args :", method.args, "result :", method.result);
}
ad.beforeAdvice = function(method:MethodInfo):void {
trace("@before","name :", method.name,"args :", method.args, "result :", method.result);
}
ad.returningAdvice = function(method:MethodInfo):void {
trace("@return","name :", method.name,"args :", method.args, "result :", method.result);
}
ad.throwingAdvice = function(method:MethodInfo, e:Error):void {
trace("@throw","name :", method.name,"args :", method.args, "result :", method.result);
}
ad.afterAdvice = function(method:MethodInfo):void {
trace("@after","name :", method.name,"args :", method.args, "result :", method.result);
}
var pc:Pointcut = new RegExpPointcut(/ad+/, ad);
p.$addPointcut(pc);
trace(p.add(new Point(2,3)));
}
}
}