Spring框架是一個為Java應用程序開發提供綜合、廣泛的基礎性支持的Java平臺。Spring幫助開發者解決了開發中基礎性的問題,使得開發人員可以專注于應用程序的開發。Spring框架本身也是按照設計模式精心打...
1 什么是Spring框架,Spring框架有哪些主要模塊
2 使用Spring框架能帶來哪些好處
3 什么是控制反轉(IoC),什么是依賴注入
4 在Java中依賴注入有哪些方式
5 BeanFactory和ApplicationContext有什么區別
6 Spring提供幾種配置方式來設置元數據
7 如何使用XML配置方式配置Spring
8 Spring提供哪些配置形式
9 怎樣用注解的方式配置Spring
10 請解釋Spring Bean的生命周期
11 更多經典高頻面試題
01
什么是Spring框架,Spring框架有哪些主要模塊
Spring框架是一個為Java應用程序開發提供綜合、廣泛的基礎性支持的Java平臺。Spring幫助開發者解決了開發中基礎性的問題,使得開發人員可以專注于應用程序的開發。Spring框架本身也是按照設計模式精心打造的,這使得我們可以在開發環境中安心地集成Spring框架,不必擔心Spring是如何在后臺工作的。
02
使用Spring框架能帶來哪些好處
下面列舉了一些使用Spring框架帶來的主要好處。
(1)Dependency Injection(DI)使得構造器和JavaBean properties文件中的依賴關系一目了然。
(2)與EJB容器相比較,IoC容器更加趨向于輕量級。這樣一來使用IoC容器在有限的內存和CPU資源的情況下進行應用程序的開發和發布就變得十分有利。
(3)Spring并沒有閉門造車,Spring利用了已有的技術,比如ORM框架、logging框架、J2EE、Quartz和JDK Timer,以及其他視圖技術。
(4)Spring框架是按照模塊的形式來組織的。由包和類的編號就可以看出其所屬的模塊,開發者只需選用需要的模塊即可。
(5)要測試一個用Spring開發的應用程序十分簡單,因為測試相關的環境代碼都已經囊括在框架中了。更加簡單的是,利用JavaBean形式的POJO類,可以很方便地利用依賴注入來寫入測試數據。
(6)Spring的Web框架也是一個精心設計的Web MVC框架,為開發者在Web框架的選擇上提供了一個除主流框架(比如Struts)和過度設計的、不流行Web框架以外的選擇。
(7)Spring提供了一個便捷的事務管理接口,適用于小型的本地事務處理(比如在單DB的環境下)和復雜的共同事務處理(比如利用JTA的復雜DB環境)。
03
什么是控制反轉(IoC),什么是依賴注入
(1)控制反轉是應用于軟件工程領域的,在運行時被裝配器對象用來綁定耦合對象的一種編程技巧,對象之間的耦合關系在編譯時通常是未知的。在傳統的編程方式中,業務邏輯的流程是由應用程序中早已被設定好關聯關系的對象來決定的。在使用控制反轉的情況下,業務邏輯的流程是由對象關系圖來決定的,該對象關系圖由裝配器負責實例化,這種實現方式還可以將對象之間的關聯關系的定義抽象化。綁定的過程是通過“依賴注入”實現的。
(2)控制反轉是一種以給予應用程序中目標組件更多控制為目的設計范式,并在實際工作中起到了有效的作用。
(3)依賴注入是在編譯階段尚未知所需的功能是來自哪個的類的情況下,將其他對象所依賴的功能對象實例化的模式。這就需要一種機制來激活相應的組件以提供特定的功能,所以依賴注入是控制反轉的基礎。否則如果在組件不受框架控制的情況下,框架又怎么知道要創建哪個組件呢?
04
在Java中依賴注入有哪些方式
(1)構造器注入。
(2)Setter方法注入。
(3)接口注入。
05
BeanFactory和ApplicationContext有什么區別
BeanFactory 可以理解為含有Bean集合的工廠類。BeanFactory 包含了Bean的定義,以便在接收到客戶端請求時將對應的Bean實例化。
BeanFactory還能在實例化對象時生成協作類之間的關系。此舉將Bean自身從Bean客戶端的配置中解放出來。BeanFactory還包含Bean生命周期的控制,調用客戶端的初始化方法(Initialization Method)和銷毀方法(Destruction Method)。
從表面上看,ApplicationContext如同BeanFactory一樣具有Bean定義、Bean關聯關系的設置及根據請求分發Bean的功能。但ApplicationContext在此基礎上還提供了其他功能。
(1)提供了支持國際化的文本消息。
(2)統一的資源文件讀取方式。
(3)已在監聽器中注冊的Bean的事件。
以下是三種較常見的 ApplicationContext 實現方式。
(1) ClassPathXmlApplicationContext: 從ClassPath的XML配置文件中讀取上下文,并生成上下文定義。應用程序上下文從程序環境變量中取得。
ApplicationContext context = new ClassPathXmlApplicationContext(“application.xml”);
(2)FileSystemXmlApplicationContext :由文件系統中的XML配置文件讀取上下文。
ApplicationContext context = new FileSystemXmlApplicationContext(“application.xml”);
(3)XmlWebApplicationContext:由Web應用的XML文件讀取上下文。
06
Spring提供幾種配置方式來設置元數據
Spring提供以下三種配置方式來設置元數據:
(1)基于XML的配置。
(2)基于注解的配置。
(3)基于Java的配置。
07
如何使用XML配置方式配置Spring
在Spring框架中,依賴和服務需要專門的配置文件實現,一般用XML格式的配置文件。這些配置文件的格式采用公共的模板,由一系列的Bean定義和專門的應用配置選項組成。
Spring XML配置的主要目的是使所有的Spring組件都可以用XML文件的形式來進行配置。這意味著不會出現其他的Spring配置類型(比如聲明配置方式或基于Java Class的配置方式)。
Spring的XML配置方式是使用被Spring命名空間所支持的一系列的XML標簽來實現的。Spring主要的命名空間有context、beans、jdbc、tx、aop、mvc和aso。例如:
<beans>
<!-- JSON Support -->
<bean name="viewResolver"
class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
<bean name="jsonTemplate"
class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"/>
</beans>
下面這個web.xml僅配置了DispatcherServlet,最簡單的配置便能滿足應用程序配置運行時組件的需求。
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
08
Spring提供哪些配置形式
Spring對Java配置的支持是由@Configuration注解和@Bean注解來實現的。由@Bean注解的方法將會實例化、配置和初始化一個新對象,這個對象將由Spring的IoC容器來管理。@Bean聲明所起到的作用與元素類似。被@Configuration所注解的類則表示這個類的主要目的是作為Bean定義的資源。被@Configuration聲明的類可以通過在同一個類內部調用@bean方法來設置嵌入Bean的依賴關系。
最簡單的@Configuration 聲明類請參考下面的代碼:
@Configuration
public class AppConfig{
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
與上面的@Beans配置文件相同的XML配置文件如下:
<beans>
<bean id="myService" class="com.gupaoedu.services.MyServiceImpl"/>
</beans>
上述配置方式的實例化方式如下:
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
MyService myService = ctx.getBean(MyService.class);
myService.doStuff();
}
要使用組件掃描,僅需用@Configuration進行注解即可:
@Configuration
@ComponentScan(basePackages = "com.gupaoedu")
public class AppConfig {
}
在上面的例子中,com.gupaoedu包首先會被掃描到,然后在容器內查找被@Component 聲明的類,找到后將這些類按照Spring Bean定義進行注冊。
如果你要在Web應用開發中選用上述配置方式,需要用AnnotationConfigWebApplicationContext類來讀取配置文件,可以用來配置Spring的Servlet監聽器ContrextLoaderListener或者Spring MVC的DispatcherServlet。
例如:
<web-app>
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.gupaoedu.AppConfig</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.gupaoedu.web.MVCConfig</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/web/*</url-pattern>
</servlet-mapping>
</web-app>
09
怎樣用注解的方式配置Spring
Spring在2.5版本以后開始支持用注解的方式配置依賴注入。可以用注解的方式來替代XML方式的Bean描述,可以將Bean描述轉移到組件類的內部,只需要在相關類上、方法上或者字段聲明上使用注解即可。注解注入將會被容器在XML注入之前處理,所以后者會覆蓋前者對于同一個屬性的處理結果。
注解裝配在Spring中是默認關閉的,需要在Spring文件中進行配置才能使用基于注解的裝配模式。如果你想要在應用程序中使用注解的方式,請參考如下配置:
<beans>
<context:annotation-config/>
</beans>
配置完成以后,就可以用注解的方式在Spring中向屬性、方法和構造方法中自動裝配變量。
下面是幾種比較重要的注解類型。
(1)@Required:該注解應用于設值方法。
(2)@Autowired:該注解應用于設值方法、非設值方法、構造方法和變量。
(3)@Qualifier:該注解和@Autowired注解搭配使用,用于消除特定Bean自動裝配的歧義。
(4)JSR-250 Annotations:Spring支持基于JSR-250 注解的注解,即@Resource、@PostConstruct和@PreDestroy。
10
請解釋Spring Bean的生命周期
Spring Bean的生命周期簡單易懂。在一個Bean實例被初始化時,需要執行一系列初始化操作以使其達到可用的狀態。同樣,當一個Bean不再被調用時需要進行相關的析構操作,并從Bean容器中移除。
Spring Bean Factory 負責管理在Spring容器中被創建的Bean的生命周期。Bean的生命周期由兩組回調方法組成。
(1)初始化之后調用的回調方法。
(2)銷毀之前調用的回調方法。
Spring提供了以下4種方式來管理Bean的生命周期事件:
(1)InitializingBean和DisposableBean回調接口。
(2)針對特殊行為的其他Aware接口。
(3)Bean配置文件中的 customInit() 方法和 customDestroy() 方法。
(4)@PostConstruct和@PreDestroy注解方式。
使用customInit()和 customDestroy()方法管理Bean生命周期的代碼樣例如下:
<beans>
<bean id="demoBean" class="com.gupaoedu.task.DemoBean"
init-Method="customInit" destroy-Method="customDestroy">
</bean>
</beans>
更多經典高頻面試題
11 Spring Bean作用域的區別是什么
12 什么是Spring Inner Bean
13 Spring中的單例Bean是線程安全的嗎
14 請舉例說明如何在Spring中注入一個Java集合
15 如何向Spring Bean中注入java.util.Properties
16 請解釋Spring Bean的自動裝配
17 自動裝配有哪些局限性
18 請解釋各種自動裝配模式的區別
19 請舉例解釋@Required注解
20 請舉例說明@Qualifier注解
21 構造方法注入和設值注入有什么區別
22 Spring中有哪些不同類型的事件
23 FileSystemResource和ClassPathResource有什么區別
24 Spring中用到了哪些設計模式
25 在Spring中如何更有效地使用JDBC
26 請解釋Spring中的IoC容器
27 在Spring中可以注入null或空字符串嗎
題目詳解請見《Spring 5核心原理與30個類手寫實戰》一書。
《Spring 5核心原理與30個類手寫實戰》一書基于編程開發實踐,不僅深度解析Spring 5的原理與新特性,更從環境準備、頂層結構設計、數據訪問等方面一步步地推導出Spring的設計原理。在每個知識點上,均以大量的經典代碼案例輔助講解,使理論緊密聯系實際。最后手寫30個類,以體會Spring作者的創作過程,讓每一位讀者學以致用。
來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。
Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利
蘇公網安備32010402000125
蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司
南京思必達教育科技有限公司版權所有 百度統計