1. 程式人生 > 實用技巧 >面試被問了幾百遍的IOC和AOP

面試被問了幾百遍的IOC和AOP

面試也好,學習的技術知識也好,IOC和AOP都是很重要的東西,這篇文章分享一下我對這個技術知識點的瞭解。

什麼是IOC?

  IOC控制反轉/反轉控制。它是一種思想不是一個技術實現。描述的是:Java開發領域物件的建立以及管理的問題。

  例如:現有類A依賴於類B

  使用IOC思想的開發方式:不通過new關鍵字來建立物件,而是通過IOC容器來幫助我們例項化物件。我們需要哪個物件,直接從IOC容器裡面獲取即可。

為什麼叫控制反轉

  控制:指的是物件建立(例項化、管理)的權力

  反轉:控制權交給外部環境(Spring框架、IOC容器)

IOC解決了什麼問題

IOC的思想就是兩方之間不互相依賴,由第三方容器來管理相關資源。這樣有什麼好處呢?

  1.物件之間的耦合度或者說依賴程度降低;

  2.資源變的容易管理;比如你用Spring容器提供的話很容易就可以實現一個單例

什麼是AOP

  AOP:面向切面程式設計,AOP是OOP(面向物件程式設計)的一種延續

OOP程式設計思想可以解決大部分的程式碼重複問題。但是有一些問題是處理不了的。比如在父類中的多個方法的相同位置出現了重複的程式碼,OOP就解決不了。

/**
 * 動物父類
 */
public class Animal {

    /** 身高 */
    private String height;

    /** 體重 */
    private double weight;

    
public void eat() { // 效能監控程式碼 long start = System.currentTimeMillis(); // 業務邏輯程式碼 System.out.println("I can eat..."); // 效能監控程式碼 System.out.println("執行時長:" + (System.currentTimeMillis() - start)/1000f + "s"); } public void run() { // 效能監控程式碼 long
start = System.currentTimeMillis(); // 業務邏輯程式碼 System.out.println("I can run..."); // 效能監控程式碼 System.out.println("執行時長:" + (System.currentTimeMillis() - start)/1000f + "s"); } }

這部分重複的程式碼,一般統稱為橫切邏輯程式碼。

橫切邏輯程式碼存在的問題

  程式碼重複問題

  橫切邏輯程式碼和業務程式碼混雜在一起,程式碼臃腫,不變維護

AOP就是用來解決這些問題的

AOP另闢蹊徑,提出橫向抽取機制,將橫切邏輯程式碼和業務邏輯程式碼分離

程式碼拆分比較容易,難的是如何在不改變原有業務邏輯的情況下,悄無聲息的將橫向邏輯程式碼應用到原有的業務邏輯中,達到和原來一樣的效果

AOP解決了什麼問題

  AOP主要用來解決:在不改變原有業務邏輯的情況下,增強橫切邏輯程式碼,根本上解耦合,避免橫切邏輯程式碼重複。

AOP為什麼叫面向切面程式設計

  切:指的是橫切邏輯,原有業務邏輯程式碼不動,只能操作橫切邏輯程式碼,所以面向橫切邏輯

  面:橫切邏輯程式碼往往要影響的是很多個方法,每個方法如同一個點,多個點構成一個面。這裡有一個面的概念