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
?*
?* 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);
?????? }
}
posted on 2007-02-26 17:57 超越巔峰 閱讀(3949) 評論(1) 編輯 收藏 所屬分類: Java EE