歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Spring學習:編寫第一個Hello World程序

Spring學習:編寫第一個Hello World程序

日期:2017/3/1 9:16:04   编辑:Linux編程

Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決企業應用開發的復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許使用者選擇使用哪一個組件,同時為 J2EE 應用程序開發提供集成的框架。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。Spring的核心是控制反轉(IoC)和面向切面(AOP)。簡單來說,Spring是一個分層的JavaSE/EEfull-stack(一站式) 輕量級開源框架。

Spring模塊框架圖一覽:

Spring之IoC

  首先先說說IoC(Inversion of Control,控制倒轉)。這是spring的核心,貫穿始終。所謂IoC,對於spring框架來說,就是由spring來負責控制對象的生命周期和對象間的關系。這是什麼意思呢,舉個簡單的例子,我們是如何找女朋友的?常見的情況是,我們到處去看哪裡有長得漂亮身材又好的mm,然後打聽她們的興趣愛好、qq號、電話號、ip號、iq號………,想辦法認識她們,投其所好送其所要,然後嘿嘿……這個過程是復雜深奧的,我們必須自己設計和面對每個環節。傳統的程序開發也是如此,在一個對象中,如果要使用另外的對象,就必須得到它(自己new一個,或者從JNDI中查詢一個),使用完之後還要將對象銷毀(比如Connection等),對象始終會和其他的接口或類藕合起來。

  那麼IoC是如何做的呢?有點像通過婚介找女朋友,在我和女朋友之間引入了一個第三者:婚姻介紹所。婚介管理了很多男男女女的資料,我可以向婚介提出一個列表,告訴它我想找個什麼樣的女朋友,比如長得像李嘉欣,身材像林熙雷,唱歌像周傑倫,速度像卡洛斯,技術像齊達內之類的,然後婚介就會按照我們的要求,提供一個mm,我們只需要去和她談戀愛、結婚就行了。簡單明了,如果婚介給我們的人選不符合要求,我們就會拋出異常。整個過程不再由我自己控制,而是由婚介這樣一個類似容器的機構來控制。Spring所倡導的開發方式就是如此,所有的類都會在spring容器中登記,告訴spring這是個什麼東西,你需要什麼東西,然後spring會在系統運行到適當的時候,把你要的東西主動給你,同時也交給你需要的其他東西。所有的類的創建、銷毀都由 spring來控制,也就是說控制對象生存周期的不再是引用它的對象,而是spring。對於某個具體的對象而言,以前是它控制其他對象,現在是所有對象都被spring控制,所以這叫控制反轉。如果你還不明白的話,我決定放棄。

  IoC的一個重點是在系統運行中,動態的向某個對象提供它所需要的其他對象。這一點是通過DI(Dependency Injection,依賴注入)來實現的。比如對象A需要操作數據庫,以前我們總是要在A中自己編寫代碼來獲得一個Connection對象,有了 spring我們就只需要告訴spring,A中需要一個Connection,至於這個Connection怎麼構造,何時構造,A不需要知道。在系統運行時,spring會在適當的時候制造一個Connection,然後像打針一樣,注射到A當中,這樣就完成了對各個對象之間關系的控制。A需要依賴 Connection才能正常運行,而這個Connection是由spring注入到A中的,依賴注入的名字就這麼來的。那麼DI是如何實現的呢? Java 1.3之後一個重要特征是反射(reflection),它允許程序在運行的時候動態的生成對象、執行對象的方法、改變對象的屬性,spring就是通過反射來實現注入的。關於反射的相關資料請查閱java doc。
 理解了IoC和DI的概念後,一切都將變得簡單明了,剩下的工作只是在spring的框架中堆積木而已。

Spring第一個hello world程序

  新建一個Java Project項目,名字為spring-0。

  然後在src目錄下新建一個lib文件夾,把以下jar包賦值進去,然後選擇把lib文件夾下的jar包都添加到工程build path中去,新建HelloWorld.java文件,存放於com.hello包中,最後工程目錄結構如下所示:

HelloWorld.java內容如下:

 1 package com.hello;
 2 
 3 public class HelloWorld {
 4     private String name;
 5     
 6     public HelloWorld() {
 7         System.out.println("HelloWorld constructor...");
 8     }
 9     
10     public HelloWorld(String name) {
11         System.out.println("HelloWorld constructor with paramter...");
12         this.name = name;
13     }
14     
15     public void setName(String name) {
16         System.out.println("HelloWorld setName...");
17         this.name = name;
18     }
19     
20     public void hello() {
21         System.out.println("hello: " + this.name);
22     }
23 }

  然後在com.hello包中再新建一個Main.java來調用HelloWorld類,Main.java內容如下:

 1 package com.hello;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         // 1.獲取HelloWorld實例
 6         HelloWorld helloWorld = new HelloWorld();
 7         // 2.調用實例中方法
 8         helloWorld.hello();
 9     }
10 }

  當然,到這裡我們並沒有與spring產生任何交互,只是普通的調用類方法而已,下面開始進入正題。首先,點擊src文件夾,鼠標右鍵new -> File,然後命名為applicationContext.xml,該配置文件配置所調用類之間的依賴關系。

applicationContext.xml文件內容如下所示:

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
 4     
 5     <!-- 配置bean,屬性配置方式 -->
 6     <bean id="helloWorld"  class="com.hello.HelloWorld">
 7         <property name="name" value="spring"></property>
 8     </bean>
 9     
10     <!-- 通過構造方法配置bean屬性 -->
11     <bean id="helloWorld2" class="com.hello.HelloWorld">
12         <constructor-arg value="spring2" index="0"></constructor-arg>
13     </bean>
14 </beans>

最後修改Main.java文件,內容如下所示:

 1 package com.hello;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 public class Main {
 7     public static void main(String[] args) {
 8             // 1. 創建spring的IOC容器對象
 9             ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
10 
11             // 2. 從IOC容器中獲取Bean實例
12             HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloWorld");
13             // 3. 調用實例中方法
14             helloWorld.hello();
15             
16             HelloWorld helloWorld2 = (HelloWorld) ctx.getBean("helloWorld2");
17             helloWorld2.hello();
18     }
19 }

最後輸出結果如下:

  可以看到,我們在Main.java中確實調用了我們在applicationContext.xml中配置的內容,注意:在Spring IOC容器讀取Bean配置創建Bean實例之前,必須對它進行初始化,只有在容器實例化後,才可以從IoC容器裡獲取Bean實例並使用它。

Spring中如何配置Hibernate事務 http://www.linuxidc.com/Linux/2013-12/93681.htm

Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm

基於 Spring 設計並實現 RESTful Web Services http://www.linuxidc.com/Linux/2013-10/91974.htm

Spring-3.2.4 + Quartz-2.2.0集成實例 http://www.linuxidc.com/Linux/2013-10/91524.htm

使用 Spring 進行單元測試 http://www.linuxidc.com/Linux/2013-09/89913.htm

運用Spring注解實現Netty服務器端UDP應用程序 http://www.linuxidc.com/Linux/2013-09/89780.htm

Spring 3.x 企業應用開發實戰 PDF完整高清掃描版+源代碼 http://www.linuxidc.com/Linux/2013-10/91357.htm

Spring 的詳細介紹:請點這裡
Spring 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved