天天看點

後端:50 個 經典 Spring 面試題,值得收藏!

後端:50 個 經典 Spring 面試題,值得收藏!

1、基礎概念

1.1. 不同版本的 Spring Framework 有哪些主要功能?

後端:50 個 經典 Spring 面試題,值得收藏!

1.2. 什麼是 Spring Framework?

Spring 是一個開源應用架構,旨在降低應用程式開發的複雜度。

它是輕量級、松散耦合的。

它具有分層體系結構,允許使用者選擇元件,同時還為 J2EE 應用程式開發提供了一個有凝聚力的架構。

它可以內建其他架構,如 Structs、Hibernate、EJB 等,是以又稱為架構的架構。

1.3. 列舉 Spring Framework 的優點。

由于 Spring Frameworks 的分層架構,使用者可以自由選擇自己需要的元件。

Spring Framework 支援 POJO(Plain Old Java Object) 程式設計,進而具備持續內建和可測試性。

由于依賴注入和控制反轉,JDBC 得以簡化。

它是開源免費的。

1.4. Spring Framework 有哪些不同的功能?

輕量級 - Spring 在代碼量和透明度方面都很輕便。

IOC - 控制反轉

AOP - 面向切面程式設計可以将應用業務邏輯和系統服務分離,以實作高内聚。

容器 - Spring 負責建立和管理對象(Bean)的生命周期和配置。

MVC - 對 web 應用提供了高度可配置性,其他架構的內建也十分友善。

事務管理 - 提供了用于事務管理的通用抽象層。Spring 的事務支援也可用于容器較少的環境。

JDBC 異常 - Spring 的 JDBC 抽象層提供了一個異常層次結構,簡化了錯誤處理政策。

1.5. Spring Framework 中有多少個子產品,它們分别是什麼?

後端:50 個 經典 Spring 面試題,值得收藏!

Spring 核心容器 – 該層基本上是 Spring Framework 的核心。它包含以下子產品:

  • Spring Core
  • Spring Bean
  • SpEL (Spring Expression Language)
  • Spring Context

資料通路/內建 – 該層提供與資料庫互動的支援。它包含以下子產品:

  • JDBC (Java DataBase Connectivity)
  • ORM (Object Relational Mapping)
  • OXM (Object XML Mappers)
  • JMS (Java Messaging Service)
  • Transaction

Web – 該層提供了建立 Web 應用程式的支援。它包含以下子產品:

  • Web
  • Web – Servlet
  • Web – Socket
  • Web – Portlet

AOP – 該層支援面向切面程式設計

Instrumentation – 該層為類檢測和類加載器實作提供支援。

Test – 該層為使用 JUnit 和 TestNG 進行測試提供支援。

幾個雜項子產品:

  • Messaging – 該子產品為 STOMP 提供支援。它還支援注解程式設計模型,該模型用于從 WebSocket 用戶端路由和處理 STOMP 消息
  • Aspects – 該子產品為與 AspectJ 的內建提供支援。

1.6. 什麼是 Spring 配置檔案?

Spring 配置檔案是 XML 檔案。該檔案主要包含類資訊。它描述了這些類是如何配置以及互相引入的。但是,XML 配置檔案冗長且更加幹淨。如果沒有正确規劃和編寫,那麼在大項目中管理變得非常困難。

1.7. Spring 應用程式有哪些不同元件?

Spring 應用一般有以下元件:

接口 - 定義功能。

Bean 類 - 它包含屬性,setter 和 getter 方法,函數等。

Spring 面向切面程式設計(AOP) - 提供面向切面程式設計的功能。

Bean 配置檔案 - 包含類的資訊以及如何配置它們。

使用者程式 - 它使用接口。

1.8. 使用 Spring 有哪些方式?

使用 Spring 有以下方式:

  • 作為一個成熟的 Spring Web 應用程式。
  • 作為第三方 Web 架構,使用 Spring Frameworks 中間層。
  • 用于遠端使用。
  • 作為企業級 Java Bean,它可以包裝現有的 POJO(Plain Old Java Objects)。

2、依賴注入(Ioc)

2.1. 什麼是 Spring IOC 容器?

Spring 架構的核心是 Spring 容器。容器建立對象,将它們裝配在一起,配置它們并管理它們的完整生命周期。Spring 容器使用依賴注入來管理組成應用程式的元件。

容器通過讀取提供的配置中繼資料來接收對象進行執行個體化,配置群組裝的指令。該中繼資料可以通過 XML,Java 注解或 Java 代碼提供。

後端:50 個 經典 Spring 面試題,值得收藏!

img

2.2. 什麼是依賴注入?

在依賴注入中,您不必建立對象,但必須描述如何建立它們。您不是直接在代碼中将元件和服務連接配接在一起,而是描述配置檔案中哪些元件需要哪些服務。由 IoC 容器将它們裝配在一起。

2.3. 可以通過多少種方式完成依賴注入?

通常,依賴注入可以通過三種方式完成,即:

  • 構造函數注入
  • setter 注入
  • 接口注入

在 Spring Framework 中,僅使用構造函數和 setter 注入。

2.4. 區分構造函數注入和 setter 注入。

後端:50 個 經典 Spring 面試題,值得收藏!

2.5. spring 中有多少種 IOC 容器?

  • BeanFactory - BeanFactory 就像一個包含 bean 集合的工廠類。它會在用戶端要求時執行個體化 bean。
  • ApplicationContext - ApplicationContext 接口擴充了 BeanFactory 接口。它在 BeanFactory 基礎上提供了一些額外的功能。

2.6. 區分 BeanFactory 和 ApplicationContext。

後端:50 個 經典 Spring 面試題,值得收藏!

2.7. 列舉 IoC 的一些好處。

IoC 的一些好處是:

  • 它将最小化應用程式中的代碼量。
  • 它将使您的應用程式易于測試,因為它不需要單元測試用例中的任何單例或 JNDI 查找機制。
  • 它以最小的影響和最少的侵入機制促進松耦合。
  • 它支援即時的執行個體化和延遲加載服務。

2.8. Spring IoC 的實作機制。

Spring 中的 IoC 的實作原理就是工廠模式加反射機制。

示例:

interface Fruit {
     public abstract void eat();
}
class Apple implements Fruit {
    public void eat(){
        System.out.println("Apple");
    }
}
class Orange implements Fruit {
    public void eat(){
        System.out.println("Orange");
    }
}
class Factory {
    public static Fruit getInstance(String ClassName) {
        Fruit f=null;
        try {
            f=(Fruit)Class.forName(ClassName).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return f;
    }
}
class Client {
    public static void main(String[] a) {
        Fruit f=Factory.getInstance("io.github.dunwu.spring.Apple");
        if(f!=null){
            f.eat();
        }
    }
}
           

3、Beans

3.1. 什麼是 spring bean?

  • 它們是構成使用者應用程式主幹的對象。
  • Bean 由 Spring IoC 容器管理。
  • 它們由 Spring IoC 容器執行個體化,配置,裝配和管理。
  • Bean 是基于使用者提供給容器的配置中繼資料建立。

3.2. spring 提供了哪些配置方式?

  • 基于 xml 配置

bean 所需的依賴項和服務在 XML 格式的配置檔案中指定。這些配置檔案通常包含許多 bean 定義和特定于應用程式的配置選項。它們通常以 bean 标簽開頭。例如:

<bean id="studentbean" class="org.edureka.firstSpring.StudentBean">
 <property name="name" value="Edureka"></property>
</bean>
           
  • 基于注解配置

您可以通過在相關的類,方法或字段聲明上使用注解,将 bean 配置為元件類本身,而不是使用 XML 來描述 bean 裝配。預設情況下,Spring 容器中未打開注解裝配。是以,您需要在使用它之前在 Spring 配置檔案中啟用它。例如:

<beans>
<context:annotation-config/>
<!-- bean definitions go here -->
</beans>
           
  • 基于 Java API 配置

Spring 的 Java 配置是通過使用 @Bean 和 @Configuration 來實作。

  1. @Bean 注解扮演與 <bean /> 元素相同的角色。
  2. @Configuration 類允許通過簡單地調用同一個類中的其他 @Bean 方法來定義 bean 間依賴關系。

例如:

@Configuration
public class StudentConfig {
    @Bean
    public StudentBean myStudent() {
        return new StudentBean();
    }
}
           

3.3. spring 支援集中 bean scope?

Spring bean 支援 5 種 scope:

  • Singleton - 每個 Spring IoC 容器僅有一個單執行個體。
  • Prototype - 每次請求都會産生一個新的執行個體。
  • Request - 每一次 HTTP 請求都會産生一個新的執行個體,并且該 bean 僅在目前 HTTP 請求内有效。
  • Session - 每一次 HTTP 請求都會産生一個新的 bean,同時該 bean 僅在目前 HTTP session 内有效。
  • Global-session - 類似于标準的 HTTP Session 作用域,不過它僅僅在基于 portlet 的 web 應用中才有意義。Portlet 規範定義了全局 Session 的概念,它被所有構成某個 portlet web 應用的各種不同的 portlet 所共享。在 global session 作用域中定義的 bean 被限定于全局 portlet Session 的生命周期範圍内。如果你在 web 中使用 global session 作用域來辨別 bean,那麼 web 會自動當成 session 類型來使用。

僅當使用者使用支援 Web 的 ApplicationContext 時,最後三個才可用。更多spring内容

3.4. spring bean 容器的生命周期是什麼樣的?

spring bean 容器的生命周期流程如下:

  1. Spring 容器根據配置中的 bean 定義中執行個體化 bean
  2. Spring 使用依賴注入填充所有屬性,如 bean 中所定義的配置。
  3. 如果 bean 實作 BeanNameAware 接口,則工廠通過傳遞 bean 的 ID 來調用 setBeanName()。
  4. 如果 bean 實作 BeanFactoryAware 接口,工廠通過傳遞自身的執行個體來調用 setBeanFactory()。
  5. 如果存在與 bean 關聯的任何 BeanPostProcessors,則調用 preProcessBeforeInitialization() 方法。
  6. 如果為 bean 指定了 init 方法( <bean>的 init-method 屬性),那麼将調用它。
  7. 最後,如果存在與 bean 關聯的任何 BeanPostProcessors,則将調用 postProcessAfterInitialization() 方法。
  8. 如果 bean 實作 DisposableBean 接口,當 spring 容器關閉時,會調用 destory()。
  9. 如果為 bean 指定了 destroy 方法( <bean>的 destroy-method 屬性),那麼将調用它。
後端:50 個 經典 Spring 面試題,值得收藏!

3.5. 什麼是 spring 的内部 bean?

隻有将 bean 用作另一個 bean 的屬性時,才能将 bean 聲明為内部 bean。為了定義 bean,Spring 的基于 XML 的配置中繼資料在<property>或<constructor-arg> 中提供了<bean>元素的使用。内部 bean 總是匿名的,它們總是作為原型。

例如,假設我們有一個 Student 類,其中引用了 Person 類。這裡我們将隻建立一個 Person 類執行個體并在 Student 中使用它。

Student.java

public class Student {
    private Person person;
    //Setters and Getters
}
public class Person {
    private String name;
    private String address;
    //Setters and Getters
}
           

bean.xml

<bean id=“StudentBean" class="com.edureka.Student">
    <property name="person">
        <!--This is inner bean -->
        <bean class="com.edureka.Person">
            <property name="name" value=“Scott"></property>
            <property name="address" value=“Bangalore"></property>
        </bean>
    </property>
</bean>
           

3.6. 什麼是 spring 裝配

當 bean 在 Spring 容器中組合在一起時,它被稱為裝配或 bean 裝配。Spring 容器需要知道需要什麼 bean 以及容器應該如何使用依賴注入來将 bean 綁定在一起,同時裝配 bean。

3.7. 自動裝配有哪些方式?

Spring 容器能夠自動裝配 bean。也就是說,可以通過檢查 BeanFactory 的内容讓 Spring 自動解析 bean 的協作者。

自動裝配的不同模式:

  • no - 這是預設設定,表示沒有自動裝配。應使用顯式 bean 引用進行裝配。
  • byName - 它根據 bean 的名稱注入對象依賴項。它比對并裝配其屬性與 XML 檔案中由相同名稱定義的 bean。
  • byType - 它根據類型注入對象依賴項。如果屬性的類型與 XML 檔案中的一個 bean 名稱比對,則比對并裝配屬性。
  • 構造函數 - 它通過調用類的構造函數來注入依賴項。它有大量的參數。
  • autodetect - 首先容器嘗試通過構造函數使用 autowire 裝配,如果不能,則嘗試通過 byType 自動裝配。

3.8. 自動裝配有什麼局限?

  • 覆寫的可能性 - 您始終可以使用<constructor-arg> 和 <property>設定指定依賴項,這将覆寫自動裝配。
  • 基本中繼資料類型 - 簡單屬性(如原資料類型,字元串和類)無法自動裝配。
  • 令人困惑的性質 - 總是喜歡使用明确的裝配,因為自動裝配不太精确。

4、注 解

4.1. 你用過哪些重要的 Spring 注解?

  • @Controller - 用于 Spring MVC 項目中的控制器類。
  • @Service - 用于服務類。
  • @RequestMapping - 用于在控制器處理程式方法中配置 URI 映射。
  • @ResponseBody - 用于發送 Object 作為響應,通常用于發送 XML 或 JSON 資料作為響應。
  • @PathVariable - 用于将動态值從 URI 映射到處理程式方法參數。
  • @Autowired - 用于在 spring bean 中自動裝配依賴項。
  • @Qualifier - 使用 @Autowired 注解,以避免在存在多個 bean 類型執行個體時出現混淆。
  • @Scope - 用于配置 spring bean 的範圍。
  • @Configuration,@ComponentScan 和 @Bean - 用于基于 java 的配置。
  • @Aspect,@Before,@After,@Around,@Pointcut - 用于切面程式設計(AOP)。

4.2. 如何在 spring 中啟動注解裝配?

預設情況下,Spring 容器中未打開注解裝配。是以,要使用基于注解裝配,我們必須通過配置<context:annotation-config /> 元素在 Spring 配置檔案中啟用它。

4.3. @Component, @Controller, @Repository, @Service 有何差別?

  • @Component:這将 java 類标記為 bean。它是任何 Spring 管理元件的通用構造型。spring 的元件掃描機制現在可以将其拾取并将其拉入應用程式環境中。
  • @Controller:這将一個類标記為 Spring Web MVC 控制器。标有它的 Bean 會自動導入到 IoC 容器中。
  • @Service:此注解是元件注解的特化。它不會對 @Component 注解提供任何其他行為。您可以在服務層類中使用 @Service 而不是 @Component,因為它以更好的方式指定了意圖。
  • @Repository:這個注解是具有類似用途和功能的 @Component 注解的特化。它為 DAO 提供了額外的好處。它将 DAO 導入 IoC 容器,并使未經檢查的異常有資格轉換為 Spring DataAccessException。

4.4. @Required 注解有什麼用?

@Required 應用于 bean 屬性 setter 方法。此注解僅訓示必須在配置時使用 bean 定義中的顯式屬性值或使用自動裝配填充受影響的 bean 屬性。如果尚未填充受影響的 bean 屬性,則容器将抛出 BeanInitializationException。

示例:

public class Employee {
    private String name;
    @Required
    public void setName(String name){
        this.name=name;
    }
    public string getName(){
        return name;
    }
}
           

4.5. @Autowired 注解有什麼用?

@Autowired 可以更準确地控制應該在何處以及如何進行自動裝配。此注解用于在 setter 方法,構造函數,具有任意名稱或多個參數的屬性或方法上自動裝配 bean。預設情況下,它是類型驅動的注入。

public class Employee {
    private String name;
    @Autowired
    public void setName(String name) {
        this.name=name;
    }
    public string getName(){
        return name;
    }
}
           

4.6. @Qualifier 注解有什麼用?

當您建立多個相同類型的 bean 并希望僅使用屬性裝配其中一個 bean 時,您可以使用@Qualifier 注解和 @Autowired 通過指定應該裝配哪個确切的 bean 來消除歧義。

例如,這裡我們分别有兩個類,Employee 和 EmpAccount。在 EmpAccount 中,使用@Qualifier 指定了必須裝配 id 為 emp1 的 bean。

public class Employee {
    private String name;
    @Autowired
    public void setName(String name) {
        this.name=name;
    }
    public string getName() {
        return name;
    }
}
           

EmpAccount.java

public class EmpAccount {
    private Employee emp;
    @Autowired
    @Qualifier(emp1)
    public void showName() {
        System.out.println(“Employee name : ”+emp.getName);
    }
}
           

4.7. @RequestMapping 注解有什麼用?

@RequestMapping 注解用于将特定 HTTP 請求方法映射到将處理相應請求的控制器中的特定類/方法。此注解可應用于兩個級别:

  • 類級别:映射請求的 URL
  • 方法級别:映射 URL 以及 HTTP 請求方法

5、資料通路

5.1. spring DAO 有什麼用?

Spring DAO 使得 JDBC,Hibernate 或 JDO 這樣的資料通路技術更容易以一種統一的方式工作。這使得使用者容易在持久性技術之間切換。它還允許您在編寫代碼時,無需考慮捕獲每種技術不同的異常。

5.2. 列舉 Spring DAO 抛出的異常。

後端:50 個 經典 Spring 面試題,值得收藏!

5.3. spring JDBC API 中存在哪些類?

  • JdbcTemplate
  • SimpleJdbcTemplate
  • NamedParameterJdbcTemplate
  • SimpleJdbcInsert
  • SimpleJdbcCall

5.4. 使用 Spring 通路 Hibernate 的方法有哪些?

我們可以通過兩種方式使用 Spring 通路 Hibernate:

  1. 使用 Hibernate 模闆和回調進行控制反轉
  2. 擴充 HibernateDAOSupport 并應用 AOP 攔截器節點

5.5. 列舉 spring 支援的事務管理類型

Spring 支援兩種類型的事務管理:

  1. 程式化事務管理:在此過程中,在程式設計的幫助下管理事務。它為您提供極大的靈活性,但維護起來非常困難。
  2. 聲明式事務管理:在此,事務管理與業務代碼分離。僅使用注解或基于 XML 的配置來管理事務。

5.6. Spring 支援哪些 ORM 架構

  • Hibernate
  • iBatis
  • JPA
  • JDO
  • OJB

6、AOP

6.1. 什麼是 AOP?

AOP(Aspect-Oriented Programming), 即 面向切面程式設計, 它與 OOP( Object-Oriented Programming, 面向對象程式設計) 相輔相成, 提供了與 OOP 不同的抽象軟體結構的視角.

在 OOP 中, 我們以類(class)作為我們的基本單元, 而 AOP 中的基本單元是 Aspect(切面)

6.2. AOP 中的 Aspect、Advice、Pointcut、JointPoint 和 Advice 參數分别是什麼?

後端:50 個 經典 Spring 面試題,值得收藏!
  1. Aspect - Aspect 是一個實作交叉問題的類,例如事務管理。方面可以是配置的普通類,然後在 Spring Bean 配置檔案中配置,或者我們可以使用 Spring AspectJ 支援使用 @Aspect 注解将類聲明為 Aspect。
  2. Advice - Advice 是針對特定 JoinPoint 采取的操作。在程式設計方面,它們是在應用程式中達到具有比對切入點的特定 JoinPoint 時執行的方法。您可以将 Advice 視為 Spring 攔截器(Interceptor)或 Servlet 過濾器(filter)。
  3. Advice Arguments - 我們可以在 advice 方法中傳遞參數。我們可以在切入點中使用 args() 表達式來應用于與參數模式比對的任何方法。如果我們使用它,那麼我們需要在确定參數類型的 advice 方法中使用相同的名稱。
  4. Pointcut - Pointcut 是與 JoinPoint 比對的正規表達式,用于确定是否需要執行 Advice。Pointcut 使用與 JoinPoint 比對的不同類型的表達式。Spring 架構使用 AspectJ Pointcut 表達式語言來确定将應用通知方法的 JoinPoint。
  5. JoinPoint - JoinPoint 是應用程式中的特定點,例如方法執行,異常處理,更改對象變量值等。在 Spring AOP 中,JoinPoint 始終是方法的執行器。

6.3. 什麼是通知(Advice)?

特定 JoinPoint 處的 Aspect 所采取的動作稱為 Advice。Spring AOP 使用一個 Advice 作為攔截器,在 JoinPoint “周圍”維護一系列的攔截器。

6.4. 有哪些類型的通知(Advice)?

  • Before - 這些類型的 Advice 在 joinpoint 方法之前執行,并使用 @Before 注解标記進行配置。
  • After Returning - 這些類型的 Advice 在連接配接點方法正常執行後執行,并使用@AfterReturning 注解标記進行配置。
  • After Throwing - 這些類型的 Advice 僅在 joinpoint 方法通過抛出異常退出并使用 @AfterThrowing 注解标記配置時執行。
  • After (finally) - 這些類型的 Advice 在連接配接點方法之後執行,無論方法退出是正常還是異常傳回,并使用 @After 注解标記進行配置。
  • Around - 這些類型的 Advice 在連接配接點之前和之後執行,并使用 @Around 注解标記進行配置。

6.5. 指出在 spring aop 中 concern 和 cross-cutting concern 的不同之處。

concern 是我們想要在應用程式的特定子產品中定義的行為。它可以定義為我們想要實作的功能。

cross-cutting concern 是一個适用于整個應用的行為,這會影響整個應用程式。例如,日志記錄,安全性和資料傳輸是應用程式幾乎每個子產品都需要關注的問題,是以它們是跨領域的問題。

6.6. AOP 有哪些實作方式?

實作 AOP 的技術,主要分為兩大類:

  • 靜态代理 - 指使用 AOP 架構提供的指令進行編譯,進而在編譯階段就可生成 AOP 代理類,是以也稱為編譯時增強;
  • 編譯時編織(特殊編譯器實作)
  • 類加載時編織(特殊的類加載器實作)。
  • 動态代理 - 在運作時在記憶體中“臨時”生成 AOP 動态代理類,是以也被稱為運作時增強。
  • JDK 動态代理
  • CGLIB

6.7. Spring AOP and AspectJ AOP 有什麼差別?

Spring AOP 基于動态代理方式實作;AspectJ 基于靜态代理方式實作。

Spring AOP 僅支援方法級别的 PointCut;提供了完全的 AOP 支援,它還支援屬性級别的 PointCut。

6.8. 如何了解 Spring 中的代理?

将 Advice 應用于目标對象後建立的對象稱為代理。在用戶端對象的情況下,目标對象和代理對象是相同的。

Advice + Target Object = Proxy
           

6.9. 什麼是編織(Weaving)?

為了建立一個 advice 對象而連結一個 aspect 和其它應用類型或對象,稱為編織(Weaving)。在 Spring AOP 中,編織在運作時執行。請參考下圖:

後端:50 個 經典 Spring 面試題,值得收藏!

7、MVC

7.1. Spring MVC 架構有什麼用?

Spring Web MVC 架構提供 模型-視圖-控制器 架構和随時可用的元件,用于開發靈活且松散耦合的 Web 應用程式。MVC 模式有助于分離應用程式的不同方面,如輸入邏輯,業務邏輯和 UI 邏輯,同時在所有這些元素之間提供松散耦合。

7.2. 描述一下 DispatcherServlet 的工作流程

DispatcherServlet 的工作流程可以用一幅圖來說明:

後端:50 個 經典 Spring 面試題,值得收藏!
  1. 向伺服器發送 HTTP 請求,請求被前端控制器 DispatcherServlet 捕獲。
  2. DispatcherServlet 根據 -servlet.xml 中的配置對請求的 URL 進行解析,得到請求資源辨別符(URI)。然後根據該 URI,調用 HandlerMapping 獲得該 Handler 配置的所有相關的對象(包括 Handler 對象以及 Handler 對象對應的攔截器),最後以HandlerExecutionChain 對象的形式傳回。
  3. DispatcherServlet 根據獲得的Handler,選擇一個合适的 HandlerAdapter。(附注:如果成功獲得HandlerAdapter後,此時将開始執行攔截器的 preHandler(…)方法)。
  4. 提取Request中的模型資料,填充Handler入參,開始執行Handler(Controller)。在填充Handler的入參過程中,根據你的配置,Spring 将幫你做一些額外的工作:
  • HttpMessageConveter:将請求消息(如 Json、xml 等資料)轉換成一個對象,将對象轉換為指定的響應資訊。
  • 資料轉換:對請求消息進行資料轉換。如

    String

    轉換成

    Integer

    Double

    等。
  • 資料根式化:對請求消息進行資料格式化。如将字元串轉換成格式化數字或格式化日期等。
  • 資料驗證:驗證資料的有效性(長度、格式等),驗證結果存儲到

    BindingResult

    Error

    中。

5. Handler(Controller)執行完成後,向 DispatcherServlet 傳回一個 ModelAndView 對象;

6. 根據傳回的ModelAndView,選擇一個适合的 ViewResolver(必須是已經注冊到 Spring 容器中的ViewResolver)傳回給DispatcherServlet。

7. ViewResolver 結合Model和View,來渲染視圖。

8. 視圖負責将渲染結果傳回給用戶端。

7.3. 介紹一下 WebApplicationContext

WebApplicationContext 是 ApplicationContext 的擴充。它具有 Web 應用程式所需的一些額外功能。它與普通的 ApplicationContext 在解析主題和決定與哪個 servlet 關聯的能力方面有所不同。

| 靜默虛空

連結 | juejin.im/post/5cbda379f265da03ae74c282

版權申明:内容來源網絡,版權歸原創者所有。除非無法确認,都會标明作者及出處,如有侵權,煩請告知,我們會立即删除并緻歉!

IT技術分享社群

個人部落格網站:https://programmerblog.xyz

後端:50 個 經典 Spring 面試題,值得收藏!

文章推薦程式員效率:畫流程圖常用的工具程式員效率:整理常用的線上筆記軟體遠端辦公:常用的遠端協助軟體,你都知道嗎?51單片機程式下載下傳、ISP及序列槽基礎知識硬體:斷路器、接觸器、繼電器基礎知識