Spring-Aop-XML实现
生活随笔
收集整理的這篇文章主要介紹了
Spring-Aop-XML实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Spring-Aop-XML實現
- Spring-Aop理論知識
- 項目結構
- 具體步驟
- 1、創建maven 項目 導入依賴 創建好項目結構
- 2、寫一個TestDao接口 及實現類
- 3、編寫切面類
- 測試
- 自言自語
Spring-Aop理論知識
項目結構
具體步驟
1、創建maven 項目 導入依賴 創建好項目結構
<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.18</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.4</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.3.4</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.4</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>5.3.4</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.3.4</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.6</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.9.6</version></dependency></dependencies>2、寫一個TestDao接口 及實現類
/*** @version 1.0* @author: crush* @date: 2021-03-05 10:26*/ public interface TestDao {public void sayHello();public void save();public void modify();public void delete(); } /*** @version 1.0* @author: crush* @date: 2021-03-05 10:27*/ public class TestDaoImpl implements TestDao {public void sayHello() {System.out.println("正在執行的方法-->武漢加油!中國加油!");}public void save() {System.out.println("正在執行的方法-->保存");}public void modify() {System.out.println("正在執行的方法-->修改");}public void delete() {System.out.println("正在執行的方法-->刪除");} }3、編寫切面類
/*** @version 1.0* @author: crush* @date: 2021-03-10 17:12*/ public class MyAspectXml {/*** 前置通知 使用JoinPoint 接口作為參數獲得目標對象的信息**/public void before(JoinPoint jp){System.out.print("前置通知:模擬權限控制 ");System.out.println("目標對象:"+jp.getTarget()+",被增強的方法:"+jp.getSignature().getName());}public void afterReturning(JoinPoint jp){System.out.print("后置返回通知:"+"模擬刪除臨時文件" );System.out.println(",被增強的方法"+jp.getSignature().getName());}public Object around(ProceedingJoinPoint pjp) throws Throwable {System.out.println("環繞開始:執行目標方法前,模擬開啟事務");Object obj = pjp.proceed();System.out.println("環繞結束:執行目標方法后,模擬關閉事務");return obj;}public void except(Throwable throwable){System.out.println("異常通知:"+"程序執行異常"+throwable.getMessage());}public void after(){System.out.println("最終通知:釋放資源");} }```### 4、application.xml文件```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"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!--<aop:aspectj-autoproxy />聲明自動為spring容器中那些配置@aspectJ切面的bean創建代理,織入切面。proxy-target-class屬性,默認為false,表示使用jdk動態代理織入增強,為true時: 表示使用CGLib動態代理技術織入增強。--><aop:aspectj-autoproxy proxy-target-class="true"/><bean id="testDaoImpl" class="com.dao.TestDaoImpl"/><bean id="myAspectXML" class="com.aspect.MyAspectXml"/> <!-- <bean id="myAspectXML2" class="com.aspect.MyAspectXml2"/>--><!--補充:<aop:pointcut>如果位于<aop:aspect>元素中,則命名切點只能被當前<aop:aspect>內定義的元素訪問到,為了能被整個<aop:config>元素中定義的所有增強訪問,則必須在<aop:config>下定義切點。--><aop:config><!--切入點 execution 表達式 通過這個表達式篩選連接點 --><aop:pointcut id="myPointCut" expression="execution(* com.dao.*.*(..))"/><aop:aspect ref="myAspectXML"><!--aop:after 是表示 這個方法是那種通知類型after 是方法之后 method="after" 這個after是切面類中的方法 --><aop:after method="after" pointcut-ref="myPointCut"/><aop:before method="before" pointcut-ref="myPointCut"/><aop:after-returning method="afterReturning" pointcut-ref="myPointCut"/><aop:after-throwing method="except" throwing="throwable" pointcut-ref="myPointCut"/><aop:around method="around" pointcut-ref="myPointCut"/></aop:aspect></aop:config> </beans>測試
@Testpublic void Test(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");TestDao testDao = applicationContext.getBean("testDaoImpl", TestDaoImpl.class);testDao.save();/*** 輸出:* 前置通知:模擬權限控制 目標對象:com.dao.TestDaoImpl@704f1591,被增強的方法:save* 環繞開始:執行目標方法前,模擬開啟事務* 正在執行的方法-->保存* 環繞結束:執行目標方法后,模擬關閉事務* 后置返回通知:模擬刪除臨時文件,被增強的方法save* 最終通知:釋放資源*/}自言自語
再次到了課間休息,欣賞美景的時候到了。
總結
以上是生活随笔為你收集整理的Spring-Aop-XML实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring 初识Aop JDK动态代理
- 下一篇: Spring-Aop-注解实现