<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Spring 熱門 AOP 面試問題及答案 > 原文: [https://howtodoinjava.com/interview-questions/top-spring-aop-interview-questions-with-answers/](https://howtodoinjava.com/interview-questions/top-spring-aop-interview-questions-with-answers/) 在經歷了 [**Spring 核心面試問題**](https://howtodoinjava.com/spring/spring-core/top-spring-core-interview-questions-with-answers/) 之后,讓我們介紹一下 [**Spring AOP**](https://howtodoinjava.com/category/frameworks/java-spring-tutorials/spring-aop/) [面試問題](https://howtodoinjava.com/java-interview-questions/) 您的下一次技術面試。 同樣,請隨時提出一些新問題,這些新問題不在本文中,因此我可以將其包括在內,以使更多的讀者受益。 ```java Table of Contents Describe Spring AOP? What is the difference between concern and cross-cutting concern in Spring AOP? What are the available AOP implementations? What are the different advice types in spring? What is Spring AOP Proxy? What is Introduction? What is joint point and Point cut? What is Weaving in AOP? ``` ## 描述 Spring AOP? [**Spring AOP(面向切面??的編程)**](https://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html) 補充了 [**OOP**](https://howtodoinjava.com/category/object-oriented/) ,因為它也提供了模塊化。 在 OOP 中,關鍵單元是對象,但是在 AOP 中,關鍵單元**是切面**或關注點(僅假設應用程序中具有獨立模塊)。 一些切面具有集中的代碼,但是其他切面可能是分散的或纏結的,例如。 記錄或事務。 這些分散的切面稱為跨領域關注點。 橫切關注點是可能影響整個應用程序的關注點,應盡可能集中在代碼中的一個位置,例如事務管理,身份驗證,日志記錄,安全性等。 AOP 提供了一種使用簡單的可插拔配置在實際邏輯之前,之后或周圍動態添加橫切關注點的方法。 現在和將來,維護代碼也變得很容易。 您只需更改配置文件即可添加/刪除關注點,而無需重新編譯完整的源代碼(如果您要使用要求 XML 配置的切面)。 可以通過以下兩種主要方式使用 Spring AOP。 但是廣泛使用的方法是 Spring AspectJ 注解樣式。 **1)[通過 AspectJ 注解樣式](https://howtodoinjava.com/spring/spring-aop/spring-aop-aspectj-example-tutorial-using-annotation-config/) 2)[通過 Spring XML 配置樣式](https://howtodoinjava.com/spring/spring-aop/spring-aop-aspectj-xml-configuration-example/)** ## Spring AOP 中的關注和跨領域關注之間有什么區別? **關注的是我們希望在應用程序的模塊中具有的行為**。關注可以定義為我們要解決特定業務問題的功能。 例如。 在任何電子商務應用程序中,不同的關注點(或模塊)可能是庫存管理,運輸管理,用戶管理等。 **跨領域關注是適用于整個應用程序(或多個模塊)的關注**。 例如日志記錄,安全性和數據傳輸是應用程序幾乎每個模塊都需要考慮的問題,因此它們被稱為跨領域關注點。 ## 有哪些可用的 AOP 實現? 下面列出了基于 Java 的主要 AOP 實現: 1. [AspectJ](https://eclipse.org/aspectj/) 2. Spring AOP 3. [JBoss AOP](http://jbossaop.jboss.org/) 您可以在 [**Wiki 頁面**](https://en.wikipedia.org/wiki/Aspect-oriented_programming#Implementations) 中找到 AOP 實現的重要列表。 ## Spring 有哪些不同的建議類型? 建議是您有興趣在應用程序的其他模塊上應用的跨領域關注點的實現。 建議主要有 5 種: 1. **事前建議**:在連接點之前執行的建議,但是它不能阻止執行流程前進到連接點(除非它引發異常)。 要使用此建議,請使用`@Before`注解。 2. **返回后建議**:在連接點正常完成后要執行的建議。 例如,如果某個方法返回而沒有引發異常。 要使用此建議,請使用`@AfterReturning`注解。 3. **拋出后建議**:如果方法因引發異常而退出,則要執行的建議。 要使用此建議,請使用`@AfterThrowing`注解。 4. **事后建議**:無論連接點退出的方式如何(正常或特殊返回),均應執行的建議。 要使用此建議,請使用`@After`注解。 5. **周圍建議**:圍繞連接點的建議,例如方法調用。 這是最有力的建議。 要使用此建議,請使用`@Around`注解。 ## 什么是 Spring AOP 代理? 代理是一種常用的設計模式。 簡而言之,代理是一個看起來像另一個對象的對象,但是在**幕后添加了特殊功能**。 Spring AOP 是基于代理的。 AOP 代理是由 AOP 框架創建的對象,用于在運行時實現切面協定。 Spring AOP 默認將標準 JDK 動態代理用于 AOP 代理。 這使得可以代理任何接口(或一組接口)。 Spring AOP 也可以使用 CGLIB 代理。 這是代理類而不是接口所必需的。 **如果業務對象未實現接口**,則默認使用 CGLIB。 ## 什么是簡介? **簡介使切面可以聲明建議對象實現其在實際**中沒有的任何其他接口,并代表那些對象提供該接口的實現。 使用`@DeclareParents`注解進行介紹。 閱讀有關[**簡介**](https://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-introductions)的更多信息。 ## 什么是連接點和切點? 連接點是程序的執行點,例如方法的執行或異常的處理。 在 Spring AOP 中,**連接點始終表示方法執行**。 例如,如果您在`EmployeeManager`接口駕駛室內定義的所有方法都涉及到交叉問題,則這些方法都被視為連接點。 **切入點是與連接點匹配的謂詞或表達式**。 通知與切入點表達式關聯,并且在與切入點匹配的任何連接點運行(例如,表達式`execution(* EmployeeManager.getEmployeeById(..))`以匹配`EmployeeManager`接口中的方法`getEmployeeById()`)。 切入點表達式匹配的連接點的概念是 AOP 的核心,默認情況下,Spring 使用 AspectJ 切入點表達語言。 ## 什么是織入? **Spring AOP** 框架僅支持有限類型的 AspectJ 切入點,并允許將切面應用于 IoC 容器中聲明的 bean。 如果您想使用其他切入點類型或將外觀[應用于在 Spring IoC 容器外部創建的對象),則必須在 Spring 應用程序中使用 AspectJ 框架并使用其織入功能。 織入是將切面與其他外部應用程序類型或對象鏈接以創建建議對象的過程。 這可以在編譯時(例如,使用 AspectJ 編譯器),加載時或在運行時完成。 像其他純 Java AOP 框架一樣,Spring AOP 僅在運行時執行織入。 相反,AspectJ 框架同時支持編譯時和加載時織入。 AspectJ 的編譯時織入是通過稱為`ajc`的特殊 AspectJ 編譯器完成的。 它可以將切面織入到 Java 源文件中,并輸出織入的二進制類文件。 它還可以將切面織入到已編譯的類文件或 JAR 文件中。 此過程稱為編譯后織入。 您可以在 Spring IoC 容器中聲明它們之前,對類進行編譯時和編譯后織入。 Spring 根本不參與織入過程。 有關編譯時和編譯后織入的更多信息,請參考 AspectJ 文檔。 當類加載器將目標類加載到 JVM 時,就會發生 AspectJ 加載時織入(也稱為 LTW)。 對于要織入的類,需要特殊的類加載器來增強目標類的字節碼。 AspectJ 和 Spring 都提供了加載時織入器,以向類加載器添加加載時織入功能。 您只需要簡單的配置即可啟用這些加載時織布器。 現在該輪到您分享更多您在以前的面試中遇到的**Spring AOP 面試問題**,以便我可以將其包含在本帖子中,并使其對他人也更有用。 **祝您學習愉快!**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看