1. 程式人生 > >Spring - 核心模組

Spring - 核心模組

1. 什麼是Spring

Spring 是一套開源的企業級開發框架,主要用於開發java和構建java ee平臺的web應用。

2. Spring框架模組有哪些?

  1. core module
  2. bean module
  3. context module
  4. expression language module
  5. jdbc module
  6. orm module
  7. oxm module
  8. java messaging service module
  9. transaction module
  10. web module
  11. web-servlet module
  12. web struts module
  13. 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連線做雙向通訊。