閱讀963 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《Spring攻略(第2版)》——第1章 Spring簡介 1.1實例化Spring IoC容器

本節書摘來自異步社區《Spring攻略(第2版)》一書中的第1章,第1.1節,作者: 【美】Gary Mak , Josh Long , Daniel Rubio著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看

第1章 Spring簡介

在本章中,你將參加關於Spring、核心容器以及容器所提供的一些全局可用設施的一個速成班(或者一次複習),你還將了解Spring XML配置格式,以及注釋驅動的支持。本章將帶給你應付本書餘下部分中引入的概念所需要的知識。你將學習Spring IoC容器中的基本組件配置。在Spring框架的核心部分,IoC容器的設計具有高度的適應性和可配置性,提供了使你的組件配置盡可能簡單的一組工具。你能夠很簡單地設置運行於Spring IoC容器中的組件。

在Spring中,組件也被稱為“bean”。注意,這是與Sun定義的JavaBeans規範不同的概念。Spring IoC容器中聲明的bean不一定是JavaBean。它們可以是任何的POJO(簡單Java對象)。POJO這個術語的意思是沒有任何特殊要求(像實現特殊接口或者擴展特殊的基類)的普通Java對象。這個術語用於將輕量級的Java組件與其他複雜組件模型(例如EJB規範版本3.1以前的EJB組件)中的重量級組件區分開來。

到本章結束時,你將能夠使用Spring IoC容器構建一個完整的Java應用程序。而且,如果你回顧舊的Java應用程序,可能會發現自己可以使用Spring IoC容器顯著地簡化和改進它們。

1.1 實例化Spring IoC容器

1.1.1 問題
你必須實例化Spring IoC容器,讀取其配置來創建bean實例。然後,你可以從Spring IoC容器中得到可用的bean實例。

1.1.2 解決方案
Spring提供兩種IoC容器實現類型。基本的一種稱為Bean工廠(Bean factory)。更高級的一種稱為應用程序上下文(Application context),這是對Bean工廠的一種兼容的擴展。

注意,這兩種IoC容器類型的Bean配置文件相同。

應用程序上下文提供比Bean工廠更高級的特性,同時保持基本特性的兼容。所以除非是資源有限的應用程序(例如運行於一個小腳本或者移動設備上),否則我們強烈推薦使用應用程序上下文。

Bean工廠和應用程序上下文的接口分別是BeanFactory和ApplicationContext。Application Context接口是用於保持兼容性的BeanFactory子接口。

注:

為了編譯和運行本章和後續章節中介紹的Spring代碼,你必須在classpath上有Spring框架的依賴(Dependencies)。推薦的方法是使用Apache Maven或者Apache Ant and Ivy這樣的構建管理解決方案。如果你打算使用Maven,將下麵列出的依賴添加到Maven項目中。和其他地方一樣,我們使用${spring.version}標記來引用版本。你可以用對你最合適的版本來替換這一標記。本書使用版本3.0.2.RELEASE編寫和編譯代碼。

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-aop</artifactId>
 <version>${spring.version}</version>
</dependency>

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-web</artifactId>
 <version>${spring.version}</version>
</dependency>

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context-support</artifactId>
 <version>${spring.version}</version>
</dependency>

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-beans</artifactId>
 <version>${spring.version}</version>
</dependency>

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context</artifactId>
 <version>${spring.version}</version>
</dependency>

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-core</artifactId>
 <version>${spring.version}</version>
</dependency>

1.1.3 工作原理
實例化應用程序上下文
ApplicationContext僅僅是一個接口,你必須實例化一個接口的實現。ClassPathXml ApplicationContext實現從classpath中裝入一個XML配置文件,構建一個應用程序上下文。你也可以為其指定多個配置文件。

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
除了ClassPathXmlApplicationContext,Spring還提供多種其他的ApplicationContext實現。FileSystemXmlApplicationContext用於從文件係統或者URL裝載XML配置文件,而XmlWebApplicationContext和XmlPortletApplicationContext僅能用於Web和入口應用程序。

從IoC容器中得到Bean
為了從bean工廠或者應用程序上下文中得到已聲明的bean,你隻需要調用getBean()方法並且傳遞唯一的bean名稱。getBean()方法的返回類型為java.lang.Object,在使用之前你必須將其轉換為實際的類型。

SequenceGenerator generator =
   (SequenceGenerator) context.getBean("sequenceGenerator");

到了這一步,你就能夠像使用任何使用構造程序創建的對象一樣,自由地使用bean了。

運行這個序列生成器應用程序的完整源代碼在下麵的Main類中給出:

package com.apress.springrecipes.sequence;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

   public static void main(String[] args) {
     ApplicationContext context =
        new ClassPathXmlApplicationContext("beans.xml");
     SequenceGenerator generator =
        (SequenceGenerator) context.getBean("sequenceGenerator");
     System.out.println(generator.getSequence());
     System.out.println(generator.getSequence());
   }
}

如果一切正常,你應該看到如下的序列號輸出,以及一些你可能不感興趣的記錄信息:

30100000A

30100001A

最後更新:2017-05-31 15:01:31

  上一篇:go  JavaScript 代碼規範
  下一篇:go  《Spring 3.0就這麼簡單》——導讀