蔡超
(
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);
?????? }
}