Spring2 AOP在使用XML配置时如何获得target及JoinPoint
蔡超
( SCEA , MCSD , IBM RUP Specialist )
Spring Reference 中介绍如何在采用 @AspectJ 方式在剖面中如何获取 target 和 JoinPoint 并给出了示例,但并没有给出采用 XML 配置方式时介绍及示例,下面附上一个简单的小例子供大家参考。
package aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class LogAdvice1 {
public void log(JoinPoint jp,MathImp imp){
System.out.println("log:"+imp+" "+jp.toLongString());
}
}
/*
* Created on 2006-11-1
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package aop;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class MathImp /*implements Math*/{
/* (non-Javadoc)
* @see aop.Math#add(int, int)
*/
public void add(int op1, int op2) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see aop.Math#addtest(int, int)
*/
public void addtest(int op1, int op2) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see aop.Math#sub(int, int)
*/
public void sub(int op1, int op2) {
// TODO Auto-generated method stub
}
}
配置:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<!-- this is the object that will be proxied by Spring's AOP infrastructure -->
<bean id="mathImp" class="aop.MathImp"/>
<!-- this is the actual advice itself -->
<bean id="logger" class="aop.LogAdvice1"/>
<aop:config>
<aop:aspect ref="logger">
<aop:pointcut id="addLog"
expression="execution(* aop.MathImp.*(..)) and target(imp) and JoinPoint(jp)" />
<aop:before pointcut-ref="addLog"
method="log" arg-names="jp,imp" />
</aop:aspect>
</aop:config>
</beans>
测试
package aop;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Test {
public static void main(String[] args) {
AbstractApplicationContext context=new FileSystemXmlApplicationContext("aop2.xml");
//Math math=(Math) context.getBean("math");
MathImp math=(MathImp) context.getBean("mathImp");
math.add(1,2);
math.addtest(3,4);
math.sub(5,6);
}
}