具体案例放在github上,主要是jar包在上面
https://github.com/guoyansi/sPRing-aop-example
knights.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="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"> <bean id="knight" class="p1.BraveKnight"> <constructor-arg ref="quest" /> </bean> <bean id="quest" class="p1.SlayDragonQuest"></bean> <bean id="minstrel" class="p1.Minstrel"></bean> <aop:config> <aop:aspect ref="minstrel"> <aop:pointcut id="embark" expression="execution(* *.embarkOnQuest(..))" /> <aop:before pointcut-ref="embark" method="singBeforeQuest"/> <aop:after pointcut-ref="embark" method="singAfterQuest"/> </aop:aspect> </aop:config> </beans>
IQuest.java
package p1;/** * 探险 * */public interface IQuest { void embark();}
IKnight.java
package p1;public interface IKnight { void embarkOnQuest();}
BraveKnight.java
package p1;/** * 骑士 * */public class BraveKnight implements IKnight{ private IQuest quest; public BraveKnight(IQuest quest){ this.quest=quest; } @Override public void embarkOnQuest (){ quest.embark(); } }
SlayDragonQuest.java
package p1;public class SlayDragonQuest implements IQuest{ @Override public void embark() { System.out.println("SlayDragonQuest的embark......"); }}
Minstrel.java
package p1;public class Minstrel { public void singBeforeQuest(){ System.out.println("探险之前..."); } public void singAfterQuest(){ System.out.println("探险之后......"); } }
package p1;import org.springframework.context.applicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Run { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("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
新闻热点
疑难解答