100個高頻Spring面試題



   原文:https://www.javacodegeeks.com/2014/05/spring-interview-questions-and-answers.html



A:Spring概覽

1、Spring是什么?

Spring是一個企業級Java開發框架。Spring框架的核心特性可用於開發任何Java應用程序,但也有一些擴展用於在Java EE平台上構建web應用程序。Spring框架的目標是通過基於POJO的模型,使Java EE開發更加簡單。


2、Spring框架的好處?

  • 輕量級:Spring框架是輕量級的,最基礎的版本大約只有2MB。
  • 控制反轉(IOC):通過控制反轉技術,實現了解耦合。對象給出它們的依賴,而不是創建或查找依賴的對象。
  • 面向切面(AOP):Spring支持面向切面的編程,並將應用程序業務邏輯與系統服務分離。
  • MVC框架:Spring的WEB框架是一個設計良好的web MVC框架,它為web框架提供了一個很棒的替代方案。
  • 容器:Spring包含並管理對象的生命周期和配置。
  • 事務管理:Spring提供了一個一致性的事務管理接口,可以收縮到本地事務,也可以擴展到全局事務(JTA)。
  • 異常處理:Spring提供了方便的API來將具體技術的異常(由JDBC、Hibernate或JDO拋出)轉換為一致的unchecked 異常。

3、Spring有哪些模塊?

Spring大約有20個模塊,包括核心容器、Data Access/Integration、Web, AOP , Instrumentation 和Test。

⭐Spring框架最核心的是Spring Core Container它包含以下模塊:

  • Core
  • Bean
  • Context
  • Expression Language

⭐Data Access/Integration,提供與數據庫交互的支持。它包含以下模塊:

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

⭐Web,提供創建web應用程序的支持。它包含以下模塊:

  • Web
  • Web-MVC
  • Web-Socket
  • Web-Portlet

⭐Test,支持使用JUnit和TestNG進行測試。

⭐Messaging,提供對STOMP的支持。它還支持用於路由和處理來自WebSocket客戶端的STOMP消息的注釋編程模型。

⭐Aspects,提供與AspectJ集成的支持。


4、解釋Core Container(Application context)模塊

這是最基本的Spring模塊,它提供Spring框架的基本功能。BeanFactory是任何基於spring的應用程序的核心。Spring框架是基於這個模塊的,它構建了Spring容器。


5、BeanFactory實現實例

BeanFactory是工廠模式的實現,它使用控制反轉來將程序的配置和依賴項與實際的業務代碼分開。


6、XMLBeanFactory

最常用的是org.springframework.beans.factory.xml.XmlBeanFactory,它根據XML文件的定義加載對應的bean。這個容器從XML文件中讀取配置元數據,並使用它創建完全配置化的應用程序。


7、解釋AOP模塊

AOP模塊用於為支持Spring應用程序面向切面的開發。AOP聯盟提供了很多支持,這樣就確保了Spring和其他AOP框架的共通性。本模塊還將元數據編程引入Spring。


8、解釋JDBC抽象和DAO模塊

使用JDBC抽象和DAO模塊,我們可以確保保持數據庫代碼的整潔和簡單,並避免數據庫資源關閉而導致的問題。它在多個數據庫服務器給出的異常之上提供了一層統一的異常。它還利用Spring的AOP模塊為Spring應用程序中的對象提供事務管理服務。


9、解釋對象/關系映射集成模塊

Spring還通過提供ORM模塊,支持直接在JDBC上使用對象/關系映射(ORM)工具。Spring支持集成幾個流行的ORM框架中,包括Hibernate、JDO和iBATIS SQL Maps。Spring的事務管理同樣支持這些ORM框架和JDBC。


10、解釋Spring web模塊

Spring web模塊基於applicationcontext模塊,提供了一個適合基於web的應用程序的上下文。此模塊還支持多種面向web的任務,例如隱式地處理文件上傳請求,以及將請求參數編程綁定到業務對象。還包含與Jakarta Struts的集成。


11、解釋Spring MVC模塊

Spring提供了MVC框架,用於構建web應用程序。Spring可以很簡單與其他MVC框架集成,但是Spring的MVC框架是一個更好的選擇,因為它使用IOC將控制層邏輯與業務對象完全分離。使用Spring MVC,你可以聲明性地將請求參數綁定到業務對象。


12、Spring配置文件

Spring配置文件是一個XML文件。這個文件包含類信息,並說明這些類是如何配置和相互調用的。


13、如何才能有多個Spring配置文件?

  • web.xml contextConfigLocation:你可以通過ContextConfigLocation元素將多個配置文件全部加載到Web應用程序上下文中。假設你正在編寫一個web應用程序,已經有了主應用程序上下文。你只需在下一個上下文的聲明之間留出一些空白。
  • applicationContext.xml導入resource:你可以添加你的主applicationContext.xml至web.xml文件,然后在主上下文中使用import語句。

14、ApplicationContext有哪些常見實現?

  • FileSystemXmlApplicationContext容器從XML文件加載bean的定義。XML bean配置文件的完整路徑必須提供給構造函數。
  • ClassPathXmlApplicationContext容器也從XML文件加載bean的定義。這里,你需要正確設置classpath因為這個容器將在classpath里找bean配置。
  • WebXmlApplicationContext容器從web應用程序中加載包含所有bean定義的XML文件。

15、Bean Factory和ApplicationContext有什么區別?

Application contexts提供一種方法處理文本消息,一個通常的做法是加載文件資源(比如鏡像),它們可以向注冊為監聽器的bean發布事件。另外,在容器或容器內的對象上執行的那些不得不由bean工廠以程序化方式處理的操作,可以在Application contexts中以聲明的方式處理。Application contexts實現了MessageSource接口,該接口的實現以可插拔的方式提供獲取本地化消息的方法。


16、Spring框架的一些最佳實踐是什么?

可見20 個Spring框架實踐


17、使用Spring框架的方式有哪些?

可以這樣使用Spring框架:

  • 用於編寫web應用程序
  • 提供Restful服務
  • 保護你的web應用程序
  • 聯通數據庫
  • 處理長時間運行的作業
  • 處理你必須要用的外部資源和系統
  • 用於測試
  • 用於獨立的java項目
  • 將應用程序轉換為可執行文件
  • 將社交媒體集成到應用程序中

18、我們如何使用Spring創建restful web服務來返回JSON響應結果?

只要Jackson2在classpath中,SpringBoor程序中的任何Spring @RestController修飾的控制器默認都返回json格式結果。


19、Spring vs Spring MVC vs Spring Boot?

  • Spring:Spring最重要的特性是依賴注入或控制反轉。
  • Spring MVC :是一個完全面向HTTP的MVC框架,由Spring框架管理並基於servlet。
  • SpringBoot:是一個用於快速配置的應用框架,它提供現成的配置,以便構建Spring應用。

20、一個Spring大概是什么樣子?

  • 接口:定義了一些方法的接口。
  • Bean類:它包含屬性、setter和getter方法、其它方法等等。
  • Spring AOP:提供關注橫切面的功能。
  • XML配置文件:包含類的信息以及如何配置它們。
  • 客戶程序:調用方法。

B:依賴注入

21、Spring的IOC容器是什么?

Spring IOC負責創建對象,使用依賴注入(dependency injection,DI)管理它們,將對象集中起來,配置對象,管理對象的整個生命周期。


22、IOC的好處有哪些?

  • IOC或依賴注入最小化應用程序代碼量。
  • 它使測試應用程序變得容易,因為單元測試中不需要單例或JNDI查找機制。
  • 以最小的代價和最少的干擾來促進松耦合。
  • IOC容器支持快速實例化和懶加載。

23、Spirng中有多少種IOC容器?

  • BeanFactory:BeanFactory本質上只不過是高層級的工廠接口,它能夠維護不同bean及其依賴項的注冊表。BeanFactory使你能夠讀取bean定義並使用bean工廠調用它們。
  • ApplicationContext:ApplicationContext是Spring應用程序中的核心接口,用於向應用程序提供配置信息。它在運行時是只讀的,但如果需要並且應用支持的話,可以重新加載。許多類實現了ApplicationContext接口,允許多種配置項和應用類型。

24、BeanFactory和ApplicationContext比較

Application Context:

  • Bean實例化/裝配
  • BeanPostProcessor自動注冊
  • BeanFactoryPostProcessor自動注冊
  • 方便的消息源訪問(針對i18n)
  • ApplicationEvent發布

BeanFactory:

  • Bean實例化/裝配

25、什么是Spring中的依賴注入?

依賴注入是控制反轉(IOC)的一個方面,是一個通用的概念,它有很多種表達的方式。這個概念意思你不創建你的對象,但描述他們應該如何創建。你不會在代碼中直接將組件和服務耦合在一起,而是描述配置文件中的哪些組件需要哪些服務。然后由一個容器(IOC容器)負責將它們關聯起來。


26、緊耦合和松耦合有什么區別?

緊耦合:

  • 緊密耦合是指類之間高度依賴。

松耦合:

  • 松耦合是通過促進單一職責和關注點分離的設計來實現的。

27、IOC(依賴注入)有哪些不同類型?

  • 構造方法注入:基於構造方法的依賴注入是在容器調用一個帶有多個參數的類構造方法時完成的,每個參數都表示對其他類的依賴。
  • Setter注入:Setter注入是由容器在調用無參數構造方法或無參數靜態工廠方法實例化Bean后調用Bean的Setter方法來實現的。

28、你建議使用構造方法注入還是Setter注入?

可以同時使用構造方法注入和Setter注入。最好的解決方案是對強制依賴項使用構造方法注入,對可選依賴項使用setter方法注入。


C.Spring Beans

29、Spring beans是什么?

Spring bean是構成Spring應用程序主干的Java對象。它們由springioc容器實例化、組裝和管理。這些bean是使用提供給容器的配置元數據創建的,例如,XML中<bean/>形式定義。

spring框架中定義的bean是單例bean。bean標記中有一個名為“singleton”的屬性,如果指定為true,則bean為單例;如果設置為false,則bean將成為prototype bean。默認設置為true。所以,spring框架中的所有bean默認都是單例bean。


30、Spring bean定義包含什么?

Spring bean的定義包含容器如何創建Bean、其生命周期及其依賴關系所需的所有配置元數據。


31、如何向Spring容器提供配置元數據?

向Spring容器提供配置元數據有三種重要方法:


32、怎么定義bean的作用域?

在Spring中定義<bean>時,我們還可以為bean聲明一個作用域。它可以通過bean定義中的scope屬性來定義。例如,當Spring每次需要生成一個新的bean實例時,這個bean的scope屬性就是prototype。另一方面,當Spring每次需要時都必須返回同一個bean實例時,bean scope屬性必須設置為singleton。


33、說明Sprig支持的bean作用域

  • singleton:Spring將bean定義的范圍限定為每個Spring IOC容器只有一個單實例。
  • prototype:單個bean定義有任意數量的對象實例。
  • request:作用域為一次http請求,該作用域僅在基於web的Spring ApplicationContext情形下有效。
  • session:作用域為HTTP Session,該作用域僅在基於web的Spring ApplicationContext情形下有效。
  • global-session:作用域為全局的HTTP session。該作用域也是僅在基於web的Spring ApplicationContext情形下有效。

默認的作用域是singleton。


34、單例作用域是線程安全的嗎?

不,單例bean在Spring框架中不是線程安全的。


35、解釋Spring Bean的聲明周期

  • Spring容器 從XML 文件中讀取bean的定義,並實例化bean。
  • Spring填充bean定義(DI)中指定的所有屬性。
  • 如果bean實現了BeanNameAware接口,spring會將bean的id傳遞給setBeanName()方法。
  • 如果有任何BeanBeanPostProcessor與該bean關聯,Spring將調用postProcesserBeforeInitialization()方法。
  • 如果bean實現了IntializingBean,則調用其afterPropertySet()方法。如果bean聲明了init方法,則調用指定的init方法。
  • 如果有任何與bean關聯的beanPostProcessor,則將調用它們的postProcessAfterInitialization()方法。
  • 如果bean實現l了DisposableBean,它將調用destroy()方法。

36、有哪些重要的bean生命周期方法?你能重寫它們嗎?

有兩個重要的生命周期方法。

第一個是setup,當bean加載到容器中時調用它。第二個方法是teardown方法,當bean從容器中卸載時調用該方法。

bean標簽有兩個重要的屬性(init-method和destroy-method),可以用它們定義自己的自定義初始化和銷毀方法。還有相應的注解(@PostConstruct和@PreDestroy)。


37、Spring的內部bean是什么?

當一個bean僅被用作另一個bean的屬性時,它能被聲明為一個內部bean,為了定義內部bean,在Spring 的 基於XML的 配置元數據中,可以在 < property/ >或 < constructor-arg/ > 元素內使用< bean/ > 元素,內部bean通常是匿名的,它們的作用域一般是prototype。


38、如何在Spring中注入Java集合?

Spring提供以下幾種集合的配置元素:

  • <list>類型用於注入一列值,允許有相同的值。

  • <set> 類型用於注入一組值,不允許有相同的值。

  • <map> 類型用於注入一組鍵值對,鍵和值都可以為任意類型。

  • <props>類型用於注入一組鍵值對,鍵和值都只能為String類型。


39、什么是Spring Bean裝配?

裝配,或bean 裝配是指在Spring 容器中把bean組裝到一起,前提是容器需要知道bean的依賴關系,如何通過依賴注入來把它們裝配到一起。


40、什么是Bean自動裝配?

Spring 容器能夠自動裝配自動關聯的bean,這意味着,通過檢查BeanFactory的內容,而不使用<constructor arg>和<property>元素,能通過Bean工廠自動處理bean之間的協作。


41、解釋不同類型的自動裝配

自動裝配有五種模式,可用於指示Spring容器使用autowiring進行依賴注入:

  • no:默認的方式是不進行自動裝配,通過顯式設置ref 屬性來進行裝配。
  • byName:通過參數名 自動裝配,Spring容器在配置文件中發現bean的autowire屬性被設置成byname,之后容器試圖匹配、裝配和該bean的屬性具有相同名字的bean。
  • byType:過參數類型自動裝配,Spring容器在配置文件中發現bean的autowire屬性被設置成byType,之后容器試圖匹配、裝配和該bean的屬性具有相同類型的bean。如果有多個bean符合條件,則拋出異常。
  • constructor:這個方式類似於byType, 但是要提供構造器參數,如果沒有確定的帶參數的構造器參數類型,將會拋出異常。
  • autodetect:首先嘗試使用constructor來自動裝配,如果不行,則使用byType方式。

42、自動注入有限制嗎?

自動注入的限制:

  • 重寫: 你仍可以用 < constructor-arg >和 < property > 配置來定義依賴,這些配置將始終覆蓋自動注入。
  • 基本數據類型:不能自動裝配簡單的屬性,如基本數據類型、字符串和類。
  • 模糊特性:自動裝配不如顯式裝配精確,如果有可能盡量使用顯示裝配。

43、你能在Spring中注入null和空字符串嗎?

是的,可以。


D.Spring注解

44、有哪些重要的Spring注解?

我在項目中使用的一些Spring注解:

  • @Component:用於指示類是組件。這些類用於自動注入,並在使用基於注解的配置時配置為bean。
  • @Controller:是一種特定類型的組件,用於MVC應用程序,主要與@RequestMapping注解一起使用。
  • @Repository:用於表示組件用作存儲庫和存儲/檢索/搜索數據的操作。我們可以將此注解應用於DAO實現類。
  • @Service:用於指示類是服務層。

  • @Required:此注解簡單地說明作用的bean屬性必須在配置時通過bean定義中的顯式屬性值或通過自動注入填充。如果作用的bean屬性未填充,容器將拋出BeanInitializationException。
  • @ResponseBody:用於將對象作為response,通常用於將XML或JSON數據作為response發送。
  • @PathVariable:用於將動態值從URI映射到處理方法參數。
  • @Autowired:對自動注入的位置和方式提供了更細粒度的控制。它可以用於在setter方法上自動注入bean。就像@Required 注解一樣,修飾setter方法、構造器、屬性或者具有任意名稱和/或多個參數的PN方法。
  • @Qualifier:當有多個相同類型的bean並且只需要將一個bean自動注入時,@Qualifier注解與@Autowired注釋一起使用,通過指定將連接哪個bean來消除歧義。

  • @Scope:配置Spring bean的作用域。
  • @Configuration:表示Spring IOC容器可以將該類用作bean定義的源。
  • @ComponentScan:應用此注解時,將掃描包下的所有可用類。
  • @Bean:對於基於java的配置,用@Bean注解修飾的方法將返回一個在Spring應用程序上下文中注冊為Bean的對象。

  • 用於配置切面和通知、@Aspect、@Before、@After、@Around、@Pointcut等的AspectJ注解。

45、@RequestParam注解的作用是什么?

spring中的@RequestParam注解將查詢字符串的參數值綁定到控制器的方法參數。


46、注解@Primary的重要性

當有多個相同數據類型的bean時,開發人員Spring的@Primary注解,它會自動為特定bean提供更高的優先級。這個注解可以用在任何直接或間接用@Component注解修飾的類上,也可以用在用@Bean注解修飾的方法上。


47、XML配置和注解之間有什么區別?

注解的優點:

  • 所有信息都在一個文件中
  • 當類更改了,不用修改xml配置文件

xml配置的優點:

  • POJO及其行為之間更清晰地分離
  • 當你不知道哪個POJO負責該行為時,更容易找到該POJO

48、@SpringBootApplication的作用是什么?

@SpringBootApplication注解是在springboot1.2.0中引入的,它支持自動配置特性。

此批注封裝了三種不同注解的作用:

  • @Configuration:允許開發人員顯式地注冊bean
  • @ComponentScan:啟用組件掃描,這樣控制器類和其他組件將被自動發現並注冊為Spring應用程序上下文中的bean
  • @EnableAutoConfiguration:啟動SpringBoot的自動配置特性

此注解可以使用以下可選參數:

  • exclude:從自動配置中排除的類列表
  • excludeNames:從自動配置中排除完全限定類名的列表
  • scanBasePackage:其中提供了掃描程序包的列表
  • scanBasePackageClasses:提供必須應用於掃描的其他包中的類的列表

49、解釋@InitBinder?

此注解修飾在聲明日期格式的方法上,並且在整個類中,使用定義的日期格式。每當綁定作用在日期字段@InitBinder注解中時,說明使用CustomDateEditor,而CustomDateEditor則使用@InitBinder中聲明的日期格式。


50、定義@ControllerAdvice

有@ControllerAdvice注解的類可以顯式聲明為Spring bean,或者通過類路徑掃描自動注入。所有這樣的bean都是通過AnnotationAwareOrderComparator排序的,即基於@Order和Ordered,並在運行時按該順序調用。對於處理異常,將使用匹配的異常處理程序方法在第一個通知上選擇一個@ExceptionHandler。對於模型屬性和InitBinder初始化,@ModelAttribute和@InitBinder方法也將遵循@ControllerAdvice順序。


51、我們可以將一個個對象作為控制器處理程序方法的響應嗎?

是的,我們可以使用@ResponseBody注解在restful web服務中發送基於JSON或XML的響應。


52、解釋@ModelAttribute?

@ModelAttribute注解引用模型對象的屬性,用於准備模型數據。此注解將方法變量或模型對象綁定到命名的模型屬性。此注解接受一個可選值,該值表示模型屬性的名稱。@ModelAttribute注解可以在參數級別或方法級別使用。在參數級別使用此注解是為了接受請求表單值,而在方法級別則是將默認值分配給模型。


53、@RequestMapping注解

@RequestMapping注解用於將web請求映射到處理程序類(即控制器)或處理程序方法上,它可以在方法級或類級使用。如果開發人員在類級別使用@RequestMapping注釋,它將作為方法級路徑的相對路徑。


54、什么是spring中基於java的配置?給出一注解示例

基於Java的配置選項使你能夠在不使用XML的情況下編寫大多數Spring配置,但是需要一些基於Java的注釋的幫助。

一個例子是@Configuration注釋,它表示spring IOC容器可以將該類用作bean定義的源。另一個例子是@Bean注解的方法,該方法將返回一個對象,該對象應在Spring應用程序上下文中注冊為bean。


55、什么是基於注解的容器配置?

XML配置之外的另一種選擇是基於注解的配置,它依賴字節碼元數據來裝配組件,而不是尖括號聲明。開發人員不使用XML來描述bean裝配,而是通過在相關的類、方法或字段聲明上使用注解將配置移動到組件類中。


56、如何打開注解裝配?

默認情況下,Spring容器中的注解裝配不會打開。為了使用基於注解的裝配,我們必須在Spring配置文件中配置<context:annotation-config/> 元素。


E.Spring 數據訪問

57、Spring JDBC API中有哪些類?

  • JdbcTemplate
  • SimpleJdbcTemplate
  • NamedParameterJdbcTemplate
  • SimpleJdbcInsert
  • SimpleJdbcCall

58、如何在Spring框架中更高效地使用JDBC?

使用SpringJDBC 框架,資源管理和錯誤處理的代價都會被減輕。所以開發者只需寫statements 和 queries從數據存取數據,JDBC也可以在Spring框架提供的模板類的幫助下更有效地被使用,這個模板叫JdbcTemplate 。


59、JdbcTemplate

JdbcTemplate 類提供了很多便利的方法解決諸如把數據庫數據轉變成基本數據類型或對象,執行寫好的或可調用的數據庫操作語句,提供自定義的數據錯誤處理。


60、如何通過spring JdbcTemplate獲取數據?

有兩個接口可用於從數據庫中獲取數據:


61、NamedParameterJdbcTemplate的優點是什么?

NamedParameterJdbcTemplate是基於spring提供的JDBCTemplate構建的,用於與數據庫的底層交互。它可以將SQL查詢參數作為鍵值對傳遞。因此,與索引或“?”相比,程序代碼的可讀性要高得多,因此可以作為更好的標識“?“”占位符方法。特別是在參數數目龐大的情況下,后者更難跟蹤。


62、什么是SpringJDBCTemplate類以及如何使用它?

JdbcTemplate類執行SQL查詢、update語句和存儲過程調用,對結果集執行迭代,並提取返回的參數值。它隱式處理資源的創建和釋放,從而避免諸如忘記關閉連接之類的錯誤。它還捕獲JDBC異常並進行包裝。


63、 JDBC和Spring JDBC有什么區別?

Spring JDBC在JDBC的頂層提供數據操作:

1、定義連接參數
2、打開連接
3、指定語句
4、准備並執行語句
5、設置循環以迭代結果(如果有)
6、操作每個迭代
7、處理任何異常
8、處理事務
9、關閉連接


64、Spring DAO支持

Spring中對數據訪問對象(DAO)的支持目的使人們更容易以一致的方式使用JDBC、Hibernate或JDO等數據訪問技術。這使我們可以相當容易地在持久性技術之間切換,也可以不必擔心捕捉每種技術特有的異常。


65、使用Spring訪問Hibernate有哪些方式?

有兩種方式使用Spirng訪問Hibernate。

  • 使用Hibernate模板和回調進行控制反轉。
  • 擴展HibernateDAOSupport並應用AOP攔截器節點。

66、Spring支持的ORM

Spring支持下面的ORM:

  • Hibernate
  • iBatis
  • JPA(Java持久化API)
  • TopLink
  • JDO (Java Data Objects)
  • OJB

67、如何使用HibernateDaoSupport集成Spring和Hibernate?

用Spring的 SessionFactory 調用 LocalSessionFactory。集成過程分三步:

  • 配置the Hibernate SessionFactory

  • 繼承HibernateDaoSupport實現一個DAO

  • 在AOP支持的事務中裝配


68、Spring支持的事務管理類型?

  • 編程式事務管理: 這意味你通過編程的方式管理事務,給你很大的靈活性,但是難維護。

  • 聲明式事務管理: 這意味着你可以將業務代碼和事務管理分離,你只需用注解和XML配置來管理事務。


69、Spring框架的事務管理有哪些優點?

  • 它提供了跨不同事務api(如JTA、JDBC、Hibernate、JPA和JDO)的一致編程模型。

  • 它為編程事務管理提供了比JTA等許多復雜事務API更簡單的API。

  • 它支持聲明式事務管理。

  • 它很好地集成了Spring的各種數據訪問抽象。


70、哪種事務管理類型更可取?

大多數Spring框架的用戶選擇聲明式事務管理,因為它對應用代碼的影響最小,因此更符合一個無侵入的輕量級容器的思想。聲明式事務管理要優於編程式事務管理,雖然比編程式事務管理(這種方式允許你通過代碼控制事務)少了一點靈活性。


F:Spring AOP

71、解釋AOP

面向切面編程,或AOP, 是一種編程技術,允許程序模塊化橫向切割關注點,或橫切典型的責任划分,如日志和事務管理。


72、AOP有哪些優點?

a.它是非侵入性的

  • 你的service/domain類被切面通知,而無需在service/domain類中添加任何與spring aop相關的類或接口。
  • 允許開發人員專注於業務代碼,而不是切點。

b.它是用純Java實現的

  • 不需要特殊的編譯單元或特殊的類加載器

c.它使用Spring的IOC進行依賴注入

  • 切面可以配置為普通的spring bean。

d.與任何其他AOP框架一樣,它將橫切關注點編織到類中,而不從這些類中調用橫切關注點。

e.集中或模塊化橫切關注點

  • 易於維護和更改切面
  • 改變需要在一處進行。
  • 在你不希望有的類中有日志記錄,可以通過修改相應切面(日志切面)中的切入點來輕松實現。所以你只需要在一個地方做出改變。

f.用於使用基於模式(XML配置)或@AspectJ基於注解的方式創建切面。

g.易於配置


73、AOP有哪些實現?

AOP實現:

Spring AOP:

  • 通過動態代理實現
  • 它只支持方法級切入點
  • 它是基於DTD的

Apache AspectJ:

  • 通過aspectj java工具實現編譯時編織,是通過靜態代理實現的
  • 它支持字段級切入點
  • 它是基於模式和注解配置的

74、AOP術語有哪些?

  • 切面

  • 通知

  • 切點

  • 連接點

  • 引入

  • 目標對象

  • AOP代理

  • 織入


75、切面

AOP的核心結構是切面,它將影響多個類的行為封裝到可重用的模塊中。提供了一組跨領域需求的ia模塊。例如,一個日志模塊將被稱為AOP切面進行日志記錄。根據需求,應用程序可以有任意數量的切面。在spring aop中,切面是使用帶有@Aspect注釋(@AspectJ樣式)注解的常規類來實現的。


76、連接點

連接點代表一個應用程序的某個位置,在這個位置我們可以插入一個AOP切面,它實際上是個應用程序執行Spring AOP的位置。


77、通知

通知是個在方法執行前或執行后要做的動作,實際上是程序執行時要通過SpringAOP框架觸發的代碼段。

Spring切面可以應用五種類型的通知:

  • before: 前置通知,在一個方法執行前被調用

  • after: 在方法執行之后調用的通知,無論方法執行是否成功

  • after-returning: 僅當方法成功完成后執行的通知

  • after-throwing: 在方法拋出異常退出時執行的通知

  • around: 在方法執行之前和之后調用的通知


78、切點

切入點是一個或一組連接點,通知將在這些位置執行。可以通過表達式或匹配的方式指明切入點。


79、什么是引入?

引入允許我們在已存在的類中增加新的方法和屬性。


80、什么是目標對象?

目標對象是由一個或多個切面通知的對象。它將始終是一個代理對象。它也被稱為通知(advised)對象。


81、什么是代理?

代理是通知目標對象后創建的對象。從客戶端的角度看,代理對象和目標對象是一樣的。


82、有哪些不同類型的代理?

  • BeanNameAutoProxyCreator
  • DefaultAdvisorAutoProxyCreator
  • Metadata autoproxying

83、什么是織入。什么是織入應用的不同點?

織入是將切面和到其他應用類型或對象連接或創建一個被通知對象的過程。

織入可以在編譯時,加載時,或運行時完成。


84、Spring AOP中關注點和橫切關注點有什么區別?

關注點是我們希望在應用程序的模塊中擁有的行為。關注點可以定義為我們想要實現的功能。

橫切關注點是一個在整個應用程序中都適用的關注點,它會影響整個應用程序。例如,日志記錄、安全性和數據傳輸是應用程序中幾乎每個模塊都需要的關注點,因此它們是橫切關注點。


85、解釋基於XML Schema方式的切面實現

在這種情況下,切面由常規類以及基於XML的配置實現。


86、解釋基於注解的切面實現

在這種情況下(基於@AspectJ的實現),涉及到的切面聲明的風格與帶有java5標注的普通java類一致。


G.Spring Model View Controller (MVC)

87、什么是Spring MVC框架?

Spring 配備構建Web 應用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反轉把業務對象和控制邏輯清晰地隔離。它也允許以聲明的方式把請求參數和業務對象綁定。


88、創建spring mvc應用程序所需的最少配置是什么?

為了創建一個簡單的Spring MVC應用程序,我們需要做以下工作:

  • 在項目中添加spring上下文和spring-webmvc依賴。在web.xml中配置DispatcherServlet來通過spring容器處理請求。
  • 定義bean的spring bean配置文件,如果使用注解,那么必須在這里配置它。我們還需要為視圖頁面配置視圖解析器。
  • 定義用於處理客戶端請求的請求映射的控制器類。

89、說出Spring MVC請求處理的主要流程?

  • 瀏覽器向DispatcherServlet發送請求
  • DispatcherServlet獲取HanderMapping並找到適當的控制器
  • 控制器執行請求並將數據放入模型中,並將視圖名稱返回給DispatcherServlet。
  • DispatcherServlet通過視圖名稱和ViewResolver映射到對應的視圖。

90、DispatcherServlet

Spring的MVC框架是圍繞DispatcherServlet來設計的,它用來處理所有的HTTP請求和響應。


91、WebApplicationContext

WebApplicationContext 繼承了ApplicationContext 並增加了一些WEB應用必備的特有功能,它不同於一般的ApplicationContext ,因為它能處理主題,並找到被關聯的servlet。


92、 Spring MVC中的控制器是什么?

控制器提供一個訪問應用程序的行為,此行為通常通過服務接口實現。控制器解析用戶輸入並將其轉換為一個由視圖呈現給用戶的模型。Spring用一個非常抽象的方式實現了一個控制層,允許用戶創建多種用途的控制器。


93、你如何將spring mvc框架與MVC架構聯系起來?

SpringMVC框架:

  • Spring框架是一個開源的web應用程序框架和Java平台的控制反轉容器。

MVC架構:

  • MVC(Model-View-Controller,簡稱MVC)是一種用於開發web應用程序的軟件設計模式.

94、Spring MVC中的ViewResolver是什么?

Spring提供了ViewResolver,它使你能夠在瀏覽器中渲染模型,而無需將綁定到特定的視圖技術。例如,Spring允許您使用jsp、Velocity模板和XSLT視圖。對Spring處理視圖的方式很重要的兩個接口是ViewResolver和View。ViewResolver提供視圖名稱和實際視圖之間的映射。View接口處理請求的准備工作,並將請求移交給某一個視圖技術。


95、MultipartResolver是什么?怎么使用?

spring mvc通過MultipartResolver提供多請求支持。MultipartResolver解析入站多請求。你可以通過在DispatcherServlet應用程序上下文中注冊MultipartResolver bean來啟用多請求支持。



96、如何在spring mvc應用程序中上傳文件?

Spring為通過MultipartResolver接口為上傳文件提供了內置支持。該字段還有一個驗證器,用於檢查上載的文件的大小是否大於零。最后只需要一個簡單的視圖,其中包含一個帶有上載文件選項的表單。

97、Spring Web MVC怎么校驗數據?

這里有三種方式去提供校驗:使用注解、手動校驗、或者兩者混合。


98、什么是springmvc攔截器以及如何使用它?

Spring的處理程序映射機制包括處理程序攔截器,當你希望將特定功能應用於某些請求時,例如,檢查用戶主題時,這些攔截器非常有用。攔截器必須實現org.springframework.web.servlet包的HandlerInterceptor。此接口定義了三種方法:

  • preHandle:在執行實際處理程序之前調用。
  • postHandle:在執行完實際程序之后調用。
  • afterCompletion:在完成請求后調用。

H.擴展

99、Spring Security是什么?

Spring security是Spring框架中最重要的模塊之一。它使開發人員能夠以一種可管理的方式輕松地集成安全特性。在下面的示例中,我們將展示如何在springmvc應用程序中實現Spring安全性。


100、為什么要用SpringBoot?

以下是使用SpringBoot的一些好處:

  • 自動配置,使用基於類路徑和應用程序上下文的智能默認值,當然也可以根據需要重寫它們以滿足開發人員的需求。
  • 創建Spring Boot Starter 項目時,可以選擇選擇需要的功能,Spring Boot將為你管理依賴關系。
  • SpringBoot項目可以打包成jar文件。可以使用Java-jar命令從命令行將應用程序作為獨立的Java應用程序運行。
  • 在開發web應用程序時,springboot會配置一個嵌入式Tomcat服務器,以便它可以作為獨立的應用程序運行。(Tomcat是默認的,當然你也可以配置Jetty或Undertow)
  • SpringBoot包括許多有用的非功能特性(例如安全和健康檢查)。




水平有限,難免錯漏,歡迎指出或直接查看原文!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM