SpringMVC用XML方式實(shí)現(xiàn)AOP的方法示例
1.首先創(chuàng)建web工程,之后導(dǎo)入Spring jar包,目錄如下


2.文件代碼
2.1AfterAdvice
package com.niit.aop;
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
/*
* 后置通知
* havingClass方法執(zhí)行之后才執(zhí)行。
* 輸出日記
* */
public class AfterAdvice implements AfterReturningAdvice {
@Override
public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {
// TODO Auto-generated method stub
System.out.println("后置攔截:下課之后寫作業(yè)");
}
}
2.2BeforeAdvice
package com.niit.aop;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class BeforeAdvice implements MethodBeforeAdvice {
/*
* 前置通知
* 在havingClass切入點(diǎn)方法執(zhí)行之前通知
* 用于驗(yàn)證用戶的合法性。/判斷一些數(shù)據(jù)是否存在。適用于檢索。注冊(cè)判斷用戶名是否存在。
* */
@Override
public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
// TODO Auto-generated method stub
System.out.println("前面攔截:上課之前要點(diǎn)名!在調(diào)用havingClass方法之前調(diào)用");
}
}
2.3StudentIntercepter
package com.niit.aop;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class StudentIntercepter implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation method) throws Throwable {
// TODO Auto-generated method stub
if(method.getArguments().length>0) {
String name=(String)method.getArguments()[0];
if("hmq".equals(name)){
System.out.println("中間攔截:你是hmq");
}
else {
System.out.println("中間攔截:你是學(xué)生");
}
method.proceed();
}
return null;
}
}
2.4StudentIF
package com.niit.logic;
public interface StudentIF {
public void havingClass(String name);
public void dohomework(String name);
}
2.5Student
package com.niit.logic;
public class Student implements StudentIF {
//作為aop的目標(biāo)方法
public void havingClass(String name) {
System.out.println("aop的目標(biāo)方法");
System.out.println(name+"正在上課");
}
public void dohomework(String name) {
System.out.println(name+"正在寫作業(yè)");
}
}
2.6StudentLogic
package com.niit.logic;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class StudentLogic {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
StudentIF s=(StudentIF)context.getBean("student");
s.havingClass("hmq");
System.out.println("---------------");
s.dohomework("hmq");
System.out.println("---------------");
s.havingClass("abc");
System.out.println("---------------");
s.dohomework("abc");
System.out.println("---------------");
}
}
2.7applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:cache="http://www.springframework.org/schema/cache" xsi:schemaLocation=" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <!-- 自動(dòng)掃描web包,將帶有注解的類 納入spring容器管理 --> <!-- <context:component-scan base-package="com.niit.beans"> </context:component-scan> --> <!-- 定義通知 --> <bean id="BeforeAdvice" class="com.niit.aop.BeforeAdvice"></bean> <bean id="AfterAdvice" class="com.niit.aop.AfterAdvice"></bean> <!-- 定義攔截器 --> <bean id="StudentIntercepter" class="com.niit.aop.StudentIntercepter"> </bean> <!-- 定義目標(biāo) --> <bean id="target" class="com.niit.logic.Student"></bean> <!-- 切入點(diǎn) 哪些方法會(huì)被aop影響 可選 --> <bean id="pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"> <!-- 模式 --> <property name="pattern" value=".*dohomework.*" > </property> </bean> <!-- 通知器advisor 連接通知和切入點(diǎn) 可選--> <bean id="advisor" class="org.springframework.aop.support.DefaultPointcutAdvisor"> <property name="advice" ref="BeforeAdvice"/> <property name="pointcut" ref="pointcut"/> </bean> <!-- 定義代理 --> <bean id="student" class="org.springframework.aop.framework.ProxyFactoryBean"> <!-- 注入目標(biāo) --> <property name="target" ref="target"></property> <!-- 設(shè)置攔截器 --> <property name="interceptorNames"> <list> <value>BeforeAdvice</value> <value>AfterAdvice</value> <value>StudentIntercepter</value> </list> </property> <!-- 定義代理接口 --> <property name="proxyInterfaces" value="com.niit.logic.StudentIF"></property> </bean> </beans>
2.8SpringMVC.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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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.xsd
">
<!-- 包掃描:掃描注解所在的包c(diǎn)ontroller類所在的包 -->
<context:component-scan base-package="com.niit.controller"></context:component-scan>
<context:component-scan base-package="com.niit.service" />
<context:component-scan base-package="com.niit.dao" />
<!-- 開(kāi)啟注解驅(qū)動(dòng)AnnotationHandlerMapping -->
<mvc:annotation-driven/>
<!-- 配置視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--SimpleMappingExceptionResolver(異常類與 View 的對(duì)應(yīng)關(guān)系) -->
<bean
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- 定義默認(rèn)的異常處理頁(yè)面,當(dāng)該異常類型注冊(cè)時(shí)使用 -->
<property name="defaultErrorView" value="error"></property>
<!-- 定義異常處理頁(yè)面用來(lái)獲取異常信息的變量名,默認(rèn)名為exception -->
<property name="exceptionAttribute" value="ex"></property>
<!-- 定義需要特殊處理的異常,用類名或完全路徑名作為key,異常頁(yè)名作為值 -->
<property name="exceptionMappings">
<props>
<prop key="exception.MyException">my-error</prop>
<prop key="java.sql.SQLException">sql-error</prop>
<prop key="exception.KeyWordNotFoundException">my-error</prop>
<!-- 在這里還可以繼續(xù)擴(kuò)展對(duì)不同異常類型的處理 -->
</props>
</property>
</bean>
<!--托管MyExceptionHandler-->
<!--<bean class="com.niit.exception.MyExceptionHandler"/> -->
</beans>
4效果圖

到此這篇關(guān)于SpringMVC用XML方式實(shí)現(xiàn)AOP的方法示例的文章就介紹到這了,更多相關(guān)SpringMVC XML實(shí)現(xiàn)AOP內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
談?wù)凧ava利用原始HttpURLConnection發(fā)送POST數(shù)據(jù)
這篇文章主要給大家介紹java利用原始httpUrlConnection發(fā)送post數(shù)據(jù),設(shè)計(jì)到httpUrlConnection類的相關(guān)知識(shí),感興趣的朋友跟著小編一起學(xué)習(xí)吧2015-10-10
IntelliJ IDEA將導(dǎo)入的項(xiàng)目轉(zhuǎn)成maven項(xiàng)目
這篇文章主要介紹了IntelliJ IDEA將導(dǎo)入的項(xiàng)目轉(zhuǎn)成maven項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
java獲取版本號(hào)及字節(jié)碼編譯版本方法示例
這篇文章主要給大家介紹了關(guān)于java獲得版本號(hào)及字節(jié)碼編譯版本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
SpringMvc+POI處理excel表數(shù)據(jù)導(dǎo)入
這篇文章主要為大家詳細(xì)介紹了SpringMvc+POI處理excel表數(shù)據(jù)導(dǎo)入,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
詳細(xì)講解springboot如何實(shí)現(xiàn)異步任務(wù)
異步:異步與同步相對(duì),當(dāng)一個(gè)異步過(guò)程調(diào)用發(fā)出后,調(diào)用者在沒(méi)有得到結(jié)果之前,就可以繼續(xù)執(zhí)行后續(xù)操作。也就是說(shuō)無(wú)論異步方法執(zhí)行代碼需要多長(zhǎng)時(shí)間,跟主線程沒(méi)有任何影響,主線程可以繼續(xù)向下執(zhí)行2022-04-04

