天天看點

【spring相關面試題摘錄】

    • 什麼是bean的自動裝配,有哪些方式?
    • Spring Boot、Spring MVC 和 Spring 有什麼差別
      • 如何重新加載Spring Boot 上的更改,而無需重新啟動伺服器?
      • Spring Boot 中的螢幕是什麼?
    • 談談你對AOP的了解

什麼是bean的自動裝配,有哪些方式?

開啟自動裝配,隻需要在xml配置檔案中定義“autowire”屬性。

autowire屬性有五種裝配的方式:

no – 預設情況下,自動配置是通過“ref”屬性手動設定 。

byName-根據bean的屬性名稱進行自動裝配。

Cutomer的屬性名稱是person,Spring會将bean id為person的bean通過setter方法進行自動裝
配。
<bean id="cutomer" class="com.xxx.xxx.Cutomer" autowire="byName"/>
<bean id="person" class="com.xxx.xxx.Person"/>
           

byType-根據bean的類型進行自動裝配。

Cutomer的屬性person的類型為Person,Spirng會将Person類型通過setter方法進行自動裝配。
<bean id="cutomer" class="com.xxx.xxx.Cutomer" autowire="byType"/>
<bean id="person" class="com.xxx.xxx.Person"/>
           

constructor-類似byType,不過是應用于構造器的參數。如果一個bean與構造器參數的類型形同,則進行自動裝配,否則導緻異常。

autodetect-如果有預設的構造器,則通過constructor方式進行自動裝配,否則使用byType方式進行自動裝配。

@Autowired自動裝配bean,可以在字段、setter方法、構造函數上使用。

手動裝配:以value或ref的方式明确指定屬性值都是手動裝配。

需要通過‘ref’屬性來連接配接bean。

Cutomer的屬性名稱是person,Spring會将bean id為person的bean通過setter方法進行自動裝配。

<bean id="cutomer" class="com.xxx.xxx.Cutomer" autowire="byName"/>
<bean id="person" class="com.xxx.xxx.Person"/>
           

@Autowired自動裝配bean,可以在字段、setter方法、構造函數上使用。

Spring Boot、Spring MVC 和 Spring 有什麼差別

Spring是一個輕量級的使用控制反轉(IoC)和面向切面(AOP)的J2EE容器架構,用來管理Bean

–從大小與開銷兩方面而言Spring都是輕量級的。

–通過控制反轉(IoC)的技術達到松耦合的目的

–提供了面向切面程式設計的豐富支援,允許通過分離應用的業務邏輯與系統級服務進行内聚性的開發

–包含并管理應用對象(Bean)的配置和生命周期,這個意義上是一個容器。

–将簡單的元件配置、組合成為複雜的應用,這個意義上是一個架構

spring可以很友善的整合各種架構,提供AOP機制彌補OOP的代碼重複問題、更友善将不同類不同方法中的共同處理抽取成切面、自動注入給方法執行,比如日志、異常等

springmvc是spring對web架構的一個解決方案,提供了一個總的前端控制器Servlet,用來接收請求,然後定義了一套路由政策(url到handle的映射)及适配執行handle,将handle結果使用視圖解析技術生成視圖展現給前端

springboot是spring提供的一個快速開發工具包,讓程式員能更友善、更快速的開發spring+springmvc應用,簡化了配置(約定了預設配置),整合了一系列的解決方案(starter機制)、redis、mongodb、es,可以開箱即用

Spring Boot 已經建立在現有spring 架構之上。使用spring 啟動,我們避免了之前我們必須做的所有樣闆代碼和配置。因

此, Spring Boot 可以幫助我們以最少的工作量, 更加健壯地使用現有的Spring功能。

Spring Boot 的優點有:

1、減少開發,測試時間和努力。

2、使用JavaConfig 有助于避免使用XML。

3、避免大量的Maven 導入和各種版本沖突。

4、提供意見發展方法。

5、通過提供預設值快速開始開發。

6、沒有單獨的Web 伺服器需要。這意味着你不再需要啟動Tomcat,Glassfish

或其他任何東西。

7、需要更少的配置因為沒有web.xml 檔案。隻需添加用@ Configuration 注釋的類,然後添加用@Bean 注釋的方法,Spring 将自動加載對象并像以前一樣對其進行管理。您甚至可以将@Autowired 添加到bean 方法中,以使Spring 自動裝

入需要的依賴關系中。

8、基于環境的配置使用這些屬性,您可以将您正在使用的環境傳遞到應用程式:

-Dspring.profiles.active = {enviornment}。在加載主應用程式屬性檔案後,

Spring 将在(application{environment} .properties)中加載後續的應用程式屬性檔案。

如何重新加載Spring Boot 上的更改,而無需重新啟動伺服器?

這可以使用DEV 工具來實作。通過這種依賴關系,您可以節省任何更改,嵌入式tomcat 将重新啟動。Spring Boot 有一個開發工具(DevTools)子產品,它有助于提高開發人員的生産力。Java 開發人員面臨的一個主要挑戰是将檔案更改自動部署到伺服器并自動重新開機伺服器。開發人員可以重新加載Spring Boot 上的更改,而無需重新啟動伺服器。這将消除每次手動部署更改的需要。Spring Boot 在釋出它的第一個版本時沒有這個功能。這是開發人員最需要的功能。DevTools 子產品完全滿足開發人員的需求。該子產品将在生産環境中被禁用。它還提供H2 資料庫控制台以更好地測試應用程式

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
           

Spring Boot 中的螢幕是什麼?

Spring boot actuator 是spring 啟動架構中的重要功能之一。Spring boot 螢幕可幫助您通路生産環境中正在運作的應用程式的目前狀态。有幾個名額必須在生産環境中進行檢查和監控。即使一些外部應用程式可能正在使用這些服務來向

相關人員觸發警報消息。螢幕子產品公開了一組可直接作為HTTP URL 通路的REST 端點來檢查狀态

談談你對AOP的了解

系統是由許多不同的元件所組成的,每一個元件各負責一塊特定功能。除了實作自身核心功能之外,這些元件還經常承擔着額外的職責。例如日志、事務管理和安全這樣的核心服務經常融入到自身具有核心業務邏輯的元件中去。這些系統服務經常被稱為橫切關注點,因為它們會跨越系統的多個元件。

當我們需要為分散的對象引入公共行為的時候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關系,但并不适合定義從左到右的關系。例如日志功能。日志代碼往往水準地散布在所有對象層次中,而與它所散布到的對象的核心功能毫無關系。

在OOP設計中,它導緻了大量代碼的重複,而不利于各個子產品的重用。

AOP:将程式中的交叉業務邏輯(比如安全,日志,事務等),封裝成一個切面,然後注入到目标對象(具體業務邏輯)中去。AOP可以對某個對象或某些對象的功能進行增強,比如對象中的方法進行增強,可以在執行某個方法之前額外的做一些事情,在某個方法執行之後額外的做一些事情

1.應用場景 AOP适合的場景很多,包括:

·日志記錄:不需要在邏輯代碼中混雜日志代碼,在項目後期織入日志功能。可以織入的日志包括系統登入日志、服務及方法調用日志等。

·安全控制:對系統的通路進行登入驗證,對請求進行權限驗證。

·參數檢驗:對請求參數進行統一轉換或驗證。 ·事務處理:統一處理資料庫事務的送出和復原,比如在方法執行完成後自動送出事務,出現異常時自動復原。

·統一異常處理:不需要在每個方法中使用try catch捕捉異常,使用AOP集中處理。

·緩存:使用AOP實作緩存存取和清除。

·統一發信、通知,對某些方法執行或者異常攔截發送通知。 橫向共用功能通過AOP實作後, 業務邏輯代碼變得幹淨、整潔。

2. AOP的基本術語解釋如下:

·Aspect:切面,由切點和增強組成,如在Java代碼中對應一個切面類。

·JointPoint:連接配接點。程式執行的某個位置,如函數調用、函數執行、構造函數調用、擷取或設定變量、類初始化等。 ·Pointcut:切入點,也就是特定的連接配接點。一個程式有多個連接配接點,但并不是所有連接配接點都是需要關心的,找到合适的連接配接點進行切入。切入點就是選取的合适連接配接點的描述。一句話,Pointcut用來限定和描述JointPoint。

·Advice:增強。織入到目标連接配接點的代碼,也就是額外功能的代碼。

·Weaving:織入。将增強添加到目标連接配接點的過程。

·Before(前置)、After(後置)和Around(環繞):織入方位可前、 可後也可以是兩者的合集。 代理(Proxy)是實作AOP的主要技術,在代理類中包含了原始類和增強代碼的功能。

【關鍵詞:增強,代理】