具体案例放在github上,主要是jar包在上面
https://github.com/guoyansi/sPRing-aop-example
knights.xml
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd"><beanid="knight"class="p1.BraveKnight"><constructor-argref="quest"/></bean><beanid="quest"class="p1.SlayDragonQuest"></bean><beanid="minstrel"class="p1.Minstrel"></bean><aop:config><aop:aspectref="minstrel"><aop:pointcutid="embark"expression="execution(* *.embarkOnQuest(..))"/><aop:beforepointcut-ref="embark"method="singBeforeQuest"/><aop:afterpointcut-ref="embark"method="singAfterQuest"/></aop:aspect></aop:config></beans>
IQuest.java
packagep1;/*** 探险
**/publicinterfaceIQuest {voidembark();
}
IKnight.java
packagep1;publicinterfaceIKnight {voidembarkOnQuest();
}
BraveKnight.java
packagep1;/*** 骑士
**/publicclass
BraveKnightimplementsIKnight{privateIQuest quest;public
BraveKnight(IQuest quest){this.quest=quest;
}
@OverridepublicvoidembarkOnQuest (){
quest.embark();
}
}
SlayDragonQuest.java
packagep1;publicclassSlayDragonQuestimplementsIQuest{
@Overridepublicvoidembark() {
System.out.println("SlayDragonQuest的embark......");
}
}
Minstrel.java
packagep1;publicclassMinstrel {publicvoidsingBeforeQuest(){
System.out.println("探险之前...");
}publicvoidsingAfterQuest(){
System.out.println("探险之后......");
}
}
packagep1;importorg.springframework.context.applicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassRun {publicstaticvoidmain(String[] args) {
ApplicationContext context=newClassPathXmlApplicationContext("classpath*:knights.xml");
IKnight knight=(IKnight)context.getBean("knight");
knight.embarkOnQuest();
}
}
执行run的结果:
上面是一个完整的例子.如果没有commons-logging.jar
控制台上的那些红色字样就不会输出,还会出现异常.
如果没有aopalliance.jar:
nested exception is java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
如果没有aspectjweaver.jar
nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException