Spring - 核心模組
1. 什麼是Spring
Spring 是一套開源的企業級開發框架,主要用於開發java和構建java ee平臺的web應用。
2. Spring框架模組有哪些?
- core module
- bean module
- context module
- expression language module
- jdbc module
- orm module
- oxm module
- java messaging service module
- transaction module
- web module
- web-servlet module
- web struts module
- web portlet module
3. 核心模組是什麼?
Spring 核心模組是Ioc container和beans,context和beans兩個包是組成spring Ioc container的基礎。
org.springframework.beans
org.springframework.context
~.context.ApplicationContext 介面表示Spring的容器,負責啟動,配置,和裝載beans。容器通過讀取配置元檔案,建立裝配完整的應用。
4. 配置元檔案metadata是什麼?
metadata有三種表現形式,XML,java註解和java 程式碼。
它敘述組成應用的類(POJO)的定義,還有類與類之間的依賴關係。
java註解和java程式碼兩種配置方式需要少量的XML申明支援即可
使用ApplicationContext在操作POJOs時,需要創造類的例項
ClassPathXmlApplicationContext 或 FileSystemXmlApplicationContext
或者WebXmlApplicationContext
5. 如何建立容器例項?
ApplicationContext context = new ClassPathXmlApplicationContext ("service.xml","daos.xml");
程式碼如上,我們建立例項時,構造器的引數就是xml的配置檔案的名稱字串。
6. 如何使用容器取得Bean?
使用方法T getBean(String name,Class<T> requiredType)
,可以取得beans例項
例如:
UserService service = context.getBean("userService",UserService.class);
7. 如何用@Bean註解代替XML配置metadata?
@Bean是方法層的Java程式碼註解,模擬XML配置和中的<bean/>
元素,
@Bean可以用在一個註解了@Configuration 或 @Component 的類中
比如:
@Configuration
public class AppConfig {
@Bean
public TransferServiceImpl transferService() {
return new TransferServiceImpl();
}
}
上面的註解表示建立一個名為transferService
的bean,指定為在TransferServiceImpl
這個類的例項
8. 請描述下Bean的作用域?
之前提到,metadata是控制beans定義和互相之間依賴關係的清單。
bean的定義可以控制其創造object的作用域。
Spring支援6種作用域,其中4種僅支援web-aware的容器:
1)singleton:預設作用域,一個singleton類的唯一例項被作用於多個引用類,此物件儲存在單例beans池的快取裡,每次應用內請求引用此物件時,返回快取中的同一物件。
單例bean一對多服務,一般不記錄狀態
Spring中的單例類和GoF設計模式中的單例類概念不同,GoF規定一個載入器ClassLoader只能生成一個特定singleton類的例項,但是Spring的定義將classloader換成了ApplicationContext
2)- @Scope(“prototype”)
每次引用非singleton類都需要new一個該類的bean,即每次getBean時容器都給一個新的bean例項。其生命週期由開發者自行負責。
非單例bean一對一服務,記錄狀態
3)request/session/application/websocket 域作用於網路應用容器例項(例如XmlWebApplicationContext)
- @RequestScope or @Scope(“request”)
用註解方式設定一個bean用於生成請求HTTP request的例項,當請求完成時,該bean銷燬
如
@RequestScope
@Component
public class LoginAction {
// ...
}
其作用相當於
<bean id="loginAction" class="com.something.LoginAction" scope="request"/>
-
@SessionScope or @Scope(“session”)
類似Request,當HTTP Session結束時,該Scope的bean銷燬 -
@ApplicationScope or @Scope(“application”)
類似Singleton域,但此Scope下bean全域性作用於ServletContext,在ServletContext生命週期內建立和銷燬。 -
@Scope(“websocket”)
此域的bean用於WebSocket協議下通訊情景,客戶機與伺服器HTTP完成握手後,轉換TCP連線做雙向通訊。