接口:
public interface Knight {
void embarkOnQuest();
}
實現類:
/**
* Created by JackieLee on 2017/12/6.
*
* @author <a href="mailto:wb-lzl282164@alibaba-inc.com">李智龍</a>
* @date 2017/12/6
*/
public class BraveKnight implements Knight {
private Quest quest;
// 構造方法
public BraveKnight(Quest quest) {
this.quest = quest;
}
// 實現的接口方法
public void embarkOnQuest() {
System.out.println("embarkOnQuest開始....");
quest.embark();
System.out.println("embarkOnQuest結束....");
}
}
接口方法實現類的參數
/**
* Created by JackieLee on 2017/12/6.
*
* @author <a href="mailto:wb-lzl282164@alibaba-inc.com">李智龍</a>
* @date 2017/12/6
*/
public class SlayDragonQuest implements Quest {
public void embark() {
System.out.println("降服一條龍");
}
}
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: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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="knight" class="com.jackie.impl.BraveKnight">
<constructor-arg ref="quest"/>
</bean>
<bean id="quest" class="com.jackie.impl.SlayDragonQuest"/>
<!--聲明Minstrel(切點)-->
<bean id="minstrel" class="com.jackie.clazz.Minstrel"/>
<aop:config>
<aop:aspect ref="minstrel">
<!--定義切面-->
<aop:pointcut id="embark" expression="execution(* *.embarkOnQuest(..))"/>
<!--聲明前置通知(執行embarkOnQuest方法前的操作)-->
<aop:before method="singBeforeQuest" pointcut-ref="embark"/>
<!--聲明后置通知(執行embarkOnQuest方法后的操作)-->
<aop:after method="singAfterQuest" pointcut-ref="embark"/>
</aop:aspect>
</aop:config>
</beans>
測試:
@Test
public void kinghtTest(){
ApplicationContext context = new ClassPathXmlApplicationContext("knights.xml");
Knight knight = (Knight) context.getBean("knight");
knight.embarkOnQuest();
}
執行結果:
吟游詩人唱到:勇敢的騎士沖啊
embarkOnQuest開始....
降服一條龍
embarkOnQuest結束....
吟游詩人唱到:騎士失敗而歸
做切面編程aop的時候報
java.lang.NoClassDefFoundError: org/aspectj/weaver/BCException錯
缺少aspectjweaver-1.8.9.jar包或者缺少maven依賴
本文參考:《Spring實戰》