1. 程式人生 > >Spring(3)---spring IOC例項

Spring(3)---spring IOC例項

 

1- 介紹               

本教程文章是基於以下編寫的:

  • Spring Framework 4.0.4 RELEASE
  • Eclipse 4.5 MARS (ok for Eclipse 4.4 LUNA)

在本文中使用Maven來宣告Spring庫,而不是下載Spring庫,並以正常的方式來宣告。

Maven是一個工具,可以幫你自動,高效地管理您的庫,它已成為慣例,所有 Java 程式設計師必須知道。如果你不知道如何使用Maven,可以花10分鐘就學會如何使用它:

如果你想下載Spring和宣告庫,您可以用傳統的方式見附錄在檔案的結尾。

2- Spring框架

下圖顯示了Spring框架的結構。

  1. IoC Container: 這是最重要的,也是最基礎的, Spring的基礎。它的作用是配置和Java物件的生命週期管理。這篇教程中我們將學習這一部分。
  2. DAO, ORM, AOP, WEB: 該模組可用於將工具或框架整合到了Spring。

2.1- 反轉控制和依賴注入

要了解這個問題,我們使用以下幾類:

 
  1. // Interface HelloWorld

  2. public interface HelloWorld {

  3. public void sayHello();

  4. }

  5.  
  6. // Class implements HelloWorld

  7. public class SpringHelloWorld implements HelloWorld {

  8. public void sayHello() {

  9. System.out.println("Spring say Hello!");

  10. }

  11. }

  12.  
  13. // Other class implements HelloWorld

  14. public class StrutsHelloWorld implements HelloWorld {

  15. public void sayHello() {

  16. System.out.println("Struts say Hello!");

  17. }

  18. }

  19.  
  20.  
  21. // And Service class

  22. public class HelloWorldService {

  23.  
  24. // Field type HelloWorld

  25. private HelloWorld helloWorld;

  26.  
  27. // Constructor HelloWorldService

  28. // It initializes the values for the field 'helloWorld'

  29. public HelloWorldService() {

  30. this.helloWorld = new StrutsHelloWorld();

  31. }

  32.  
  33. }

顯而易見的是 HelloWorldService 類管理建立 HelloWorld 物件。

- 另外,在上述情況下,當 HelloWorldService 物件從它的構造建立時,HelloWorld物件也被建立了。 它是從StrutsHelloWorld 建立。

現在的問題是,您要建立一個HelloWorldService物件,HelloWorld物件也同時被建立,但它必須是SpringHelloWorld。

所以 HelloWorldService 是控制“物件建立” Hello World 的。我們為什麼不建立 Hello World 轉讓由第三方,

而是使用 HelloWorldService ?因為我們有“反轉控制”(IOC)的定義。

並且IoC容器將充當管理者角色,建立了HelloWorldService 和 HelloWorld 。

IoC = Inversion of Control





IoC容器建立 HelloWorldService 物件,是通過 setter 方法傳遞 HelloWorld 物件到HelloWorldService。IoC容器做的是“依賴注入”到HelloWorldService。這裡的相關性是指物件之間的依賴關係: HelloWorldService 和 helloWorld.

在這一點上,我們已經明確了什麼是 IoC和DI。讓我們舉個例子來更好的理解。

3- 建立專案

  • File/New/Other...



輸入:

  • Group Id: com.yiibai
  • Artifact Id: HelloSpring


您的專案已建立:

確保您的專案是建立在Java7或更高版本。右鍵單擊該專案並選擇屬性。

4- 宣告Spring的基礎庫

這是 Spring的 HelloWorld 例子,所以我們只使用基本的Spring庫(核心)。開啟pom.xml檔案來將使用的庫宣告:

  • pom.xml 使用以下內容重新覆蓋原上面的內容。
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                         http://maven.apache.org/xsd/maven-4.0.0.xsd">
      
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yiibai</groupId>
  <artifactId>HelloSpring</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  
      <dependencies>
 
        <!-- Spring Core -->
        <!-- http://mvnrepository.com/artifact/org.springframework/spring-core -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>
         
        <!-- Spring Context -->
        <!-- http://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>
         
    </dependencies>
  
</project>

5- 工程程式碼

  • HelloWorld.java
 
  1. package com.yiibai.tutorial.spring.helloworld;

  2.  
  3. public interface HelloWorld {

  4.  
  5. public void sayHello();

  6.  
  7. }

  • HelloWorldService.java
 
  1. package com.yiibai.tutorial.spring.helloworld;

  2.  
  3. public class HelloWorldService {

  4.  
  5. private HelloWorld helloWorld;

  6.  
  7. public HelloWorldService() {

  8.  
  9. }

  10.  
  11. public void setHelloWorld(HelloWorld helloWorld) {

  12. this.helloWorld = helloWorld;

  13. }

  14.  
  15. public HelloWorld getHelloWorld() {

  16. return this.helloWorld;

  17. }

  18.  
  19. }

  • SpringHelloWorld.java
 
  1. package com.yiibai.tutorial.spring.helloworld.impl;

  2.  
  3. import com.yiibai.tutorial.spring.helloworld.HelloWorld;

  4.  
  5. public class SpringHelloWorld implements HelloWorld {

  6.  
  7. @Override

  8. public void sayHello() {

  9. System.out.println("Spring Say Hello!!");

  10. }

  11.  
  12. }

  • StrutsHelloWorld.java
 
  1. package com.yiibai.tutorial.spring.helloworld.impl;

  2.  
  3. import com.yiibai.tutorial.spring.helloworld.HelloWorld;

  4.  
  5. public class StrutsHelloWorld implements HelloWorld {

  6.  
  7. @Override

  8. public void sayHello() {

  9. System.out.println("Struts Say Hello!!");

  10. }

  11.  
  12. }

  • HelloProgram.java
 
  1. package com.yiibai.tutorial.spring;

  2.  
  3. import com.yiibai.tutorial.spring.helloworld.HelloWorld;

  4. import com.yiibai.tutorial.spring.helloworld.HelloWorldService;

  5. import org.springframework.context.ApplicationContext;

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

  7.  
  8. public class HelloProgram {

  9.  
  10.  
  11. public static void main(String[] args) {

  12.  
  13. ApplicationContext context =

  14. new ClassPathXmlApplicationContext("beans.xml");

  15.  
  16. HelloWorldService service =

  17. (HelloWorldService) context.getBean("helloWorldService");

  18.  
  19. HelloWorld hw= service.getHelloWorld();

  20.  
  21. hw.sayHello();

  22. }

  23. }

  • beans.xml
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd">
  
    <bean id="springHelloWorld"
        class="com.yiibai.tutorial.spring.helloworld.impl.SpringHelloWorld"></bean>
    <bean id="strutsHelloWorld"
        class="com.yiibai.tutorial.spring.helloworld.impl.StrutsHelloWorld"></bean>
  
  
    <bean id="helloWorldService"
        class="com.yiibai.tutorial.spring.helloworld.HelloWorldService">
        <property name="helloWorld" ref="springHelloWorld"/>
    </bean>
  
</beans>

6- 執行示例

執行 HelloProgram.java

執行 HelloProgram 類的結果如下:

開啟 beans.xml 檔案並更改配置:

<!-- Original -->
<bean id="helloWorldService"
    class="com.yiibai.tutorial.spring.helloworld.HelloWorldService">
   <property name="helloWorld" ref="springHelloWorld"/>
</bean>
 
<!-- Change to: -->
<bean id="helloWorldService"
    class="com.yiibai.tutorial.spring.helloworld.HelloWorldService">
   <property name="helloWorld" ref="strutsHelloWorld"/>
</bean>

重新執行 HelloProgram 類並得到以下結果。

7- Spring的工作原理

Spring在這個例子中,工作原理說明如下圖所示:

beans.xml

  • 這是一個配置檔案,您可以在這裡宣告Java bean。

可以通過讀取beans.xml 檔案來建立一個應用程式上下文物件

ApplicationContext context =
                newClassPathXmlApplicationContext("beans.xml");

IoC容器中,其作用是作為第三種角色,它的任務是建立 beans.xml 檔案中宣告的 Java Bean 物件。並通過setter方法注入依賴

在這個例子中,HelloWorldService 是一個 java bean 注入依賴。

<!-- beans.xml -->
 
<beanid="helloWorldService"
    class="com.yiibai.tutorial.spring.helloworld.HelloWorldService">
    
    <!-- Call: helloWorldService.setHelloWorld(springHelloWorld) -->
    <propertyname="helloWorld"ref="springHelloWorld"/>
 
</bean>

8- 使用Spring MVC - 編寫Web應用程式

接下來,你可以學習使用Spring MVC編寫Web應用程式:

9- 附:下載Spring 庫

您可以下載 Spring 從以下網址:


解壓下載的zip檔案到硬碟驅動器資料夾,如下:

程式碼下載:http://pan.baidu.com/s/1bwgce6