91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中Spring框架之AOP如何配置

發布時間:2021-12-07 11:42:13 來源:億速云 閱讀:231 作者:小新 欄目:編程語言

這篇文章主要介紹了Java中Spring框架之AOP如何配置,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

  什么是AOP

  AOP(Aspect Oriented Programming)面向切面編程,是OOP(面向對象編程)的重要補充,面向對象是Java編程的基礎,以封裝、繼承、多態建立了對象間的層次關系,關注的是每個對象的具體實現。面向對象允許我們開發縱向的關系。

  AOP關注橫向關系,也就是說類和類之間不需要特定的關系,它能夠將某些通用的操作(如:日志處理、安全驗證、事務處理、異常處理、性能統計等)插入到這些無關的類中,從而可以讓每個類只關注自己的核心邏輯,不必處理這些通用的操作,這個過程就是橫切,而這些通用的操作就是切面Aspect。

  簡單來說:AOP能把和類的核心業務無關,多個類又共同需要的邏輯代碼封裝起來,當對象需要時自動調用,這樣就減少了類中的重復代碼,降低了類之間的耦合性,提高了程序的維護性。

  AOP術語

  1、橫切關注點

  對哪些方法進行攔截,攔截后怎么處理,這些關注點稱之為橫切關注點

  2、切面(aspect)

  類是對物體特征的抽象,切面就是對橫切關注點的抽象

  3、連接點(joinpoint)

  被攔截到的點,因為Spring只支持方法類型的連接點,所以在Spring中連接點指的就是被攔截到的方法,實際上連接點還可以是字段或者構造器

  4、切入點(pointcut)

  對連接點進行攔截的定義

  5、通知(advice)

  所謂通知指的就是指攔截到連接點之后要執行的代碼,通知分為前置、后置、異常、最終、環繞通知五類

  6、目標對象

  代理的目標對象

  7、織入(weave)

  將切面應用到目標對象并導致代理對象創建的過程

  8、引入(introduction)

  在不修改代碼的前提下,引入可以在運行期為類動態地添加一些方法或字段

  AOP應用場景

  1)日志 ,方法執行開始和完成以及出現異常都可以用日志記錄

  2)緩存 ,第一次調用查詢數據庫,將查詢結果放入內存對象, 第二次調用, 直接從內存對象返回,不需要查詢數據庫

  3)事務 ,調用方法前開啟事務, 調用方法后提交關閉事務

  等等

  AOP的配置

  1)導入Maven依賴

  <dependencies>

  <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>4.3.14.Release</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-core</artifactId>

  <version>4.3.14.RELEASE</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-beans</artifactId>

  <version>4.3.14.RELEASE</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-context-support</artifactId>

  <version>4.3.14.RELEASE</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-expression</artifactId>

  <version>4.3.14.RELEASE</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-aop</artifactId>

  <version>4.3.14.RELEASE</version>

  </dependency>

  <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->

  <dependency>

  <groupId>org.aspectj</groupId>

  <artifactId>aspectjrt</artifactId>

  <version>1.8.13</version>

  </dependency>

  <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->

  <dependency>

  <groupId>org.aspectj</groupId>

  <artifactId>aspectjweaver</artifactId>

  <version>1.8.13</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-test</artifactId>

  <version>4.3.14.RELEASE</version>

  </dependency>

  <dependency>

  <groupId>commons-logging</groupId>

  <artifactId>commons-logging</artifactId>

  <version>1.1.2</version>

  </dependency>

  <dependency>

  <groupId>log4j</groupId>

  <artifactId>log4j</artifactId>

  <version>1.2.17</version>

  </dependency>

  </dependencies>

  編寫Service接口和實現類,這里只完成模擬操作

  public interface AdminService {

  void saveAdmin();

  void updateAdmin();

  void deleteAdmin();

  void selectAdmin();

  }

  public class AdminServiceImpl implements AdminService {

  @Override

  public void saveAdmin() {

  System.out.println("Invoke saveAdmin");

  }

  @Override

  public void updateAdmin() {

  System.out.println("Invoke updateAdmin");

  }

  @Override

  public void deleteAdmin() {

  System.out.println("Invoke deleteAdmin");

  }

  @Override

  public void selectAdmin() {

  System.out.println("Invoke selectAdmin");

  }

  }

  3)編寫自定義增強類,該類的方法對應AOP的5種增強通知,分別是:

  1)前置通知before :方法調用前執行

  2)后置通知after-returning:方法調用后執行,出現異常不執行

  3)后置通知after:方法調用后執行,出現異常也執行

  4)異常通知after-throwing:出現異常執行

  5)環繞通知around:方法調用前后執行

  /**

  * 自定義增強類

  */

  public class MyAdvise {

  public void before() throws Throwable {

  System.out.println("這是before");

  }

  public void afterReturning(){

  System.out.println("這是afterReturning");

  }

  public void after(){

  System.out.println("這是after");

  }

  public void afterThrowing() throws Throwable {

  System.out.println("這是afterThrowing");

  }

  public Object around(ProceedingJoinPoint point) throws Throwable {

  System.out.println("這是around -- 前置執行");

  Object obj = point.proceed();

  System.out.println("這是around -- 后置執行");

  return obj;

  }

  }

4)   Spring配置文件

  <?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.xsd">

  <bean id="userService" class="com.qianfeng.springaop.UserServiceImpl"/>

  <bean id="adminService" class="com.qianfeng.springaop.AdminServiceImpl"/>

  <bean id="myAdvise" class="com.qianfeng.springaop.MyAdvise"/>

  <aop:config>

  <!--配置切入點

  execution中第一個*代表任意返回值類型,后面是包名,第二個*代表類名的開頭,第三個*代表任意方法,(..)代表任意方法參數

  -->

  <aop:pointcut id="c" expression="execution(* com.qianfeng.springaop.*ServiceImpl.*(..))"/>

  <!--配置方面-->

  <aop:aspect ref="myAdvise">

  <aop:before method="before" pointcut-ref="c"/>

  <aop:after method="after" pointcut-ref="c"/>

  <aop:after-returning method="afterReturning" pointcut-ref="c"/>

  <aop:after-throwing method="afterThrowing" pointcut-ref="c"/>

  <aop:around method="around" pointcut-ref="c"/>

  </aop:aspect>

  </aop:config>

  </beans>

  5)運行測試

  @RunWith(SpringJUnit4ClassRunner.class)

  @ContextConfiguration("classpath:applicationContext-aop.xml")

  public class TestAOP {

  @Test

  public void test(){

  ApplicationContext app = new

  ClassPathXmlApplicationContext("applicationContext-aop.xml");

  AdminService as = (AdminService) app.getBean("adminService");

  as.deleteAdmin();

  }

  }

  可以看到執行任何Service類的方法,都會調用MyAdvise中的通知方法

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Java中Spring框架之AOP如何配置”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

秦安县| 湟源县| 宝清县| 庆安县| 锦屏县| 乐东| 桂阳县| 盐城市| 舟山市| 天津市| 青龙| 监利县| 太白县| 信丰县| 手机| 望奎县| 淅川县| 长顺县| 剑川县| 娱乐| 武川县| 星子县| 黎川县| 济源市| 聊城市| 安达市| 宣化县| 平陆县| 中西区| 易门县| 东阿县| 遂昌县| 永和县| 贞丰县| 上思县| 饶河县| 永宁县| 临安市| 叙永县| 石家庄市| 鄂州市|