Java必備乾貨:Spring框架之IOC的基本配置

好程式設計師IT發表於2019-07-10

Spring 框架之 IOC 的基本配置 前言,上一章我們學習了 Spring IOC 特性以及 IOC 的實現原理:註解和反射,本章我們將學習如何在 Spring 中使用 IOC

Spring IOC 配置

Spring 最重要的特性是 IOC 控制反轉,利於 IOC 我們能降低物件之間的耦合性。

IOC 需要透過一定的配置實現,配置方法分為:

1) 使用 xml 檔案配置

2)使用註解配置

使用 Spring 的基本功能,必須先匯入 Spring 的依賴:

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-context</artifactId>
  4. <version>5.1.5.RELEASE</version>
  5. </dependency>

Spring Context :向  Spring 框架提供上下文資訊。 Spring  上下文包括企業服務,例如 JNDI EJB 、電子郵件、國際化、校驗和排程功能。它包含 Spring Core 元件,能實現 IOC 的核心功能。

 

使用 xml 檔案配置

  1. /**
  2. * CPU 介面
  3. */
  4. public interface Cpu {
  5. void run();
  6. }
  7. /**
  8. * AMD CPU
  9. */
  10. public class AMDCpu implements Cpu {
  11. public void run() {
  12. System.out.println("AMD CPU 正在執行 ....");
  13. }
  14. }
  15. /**
  16. 記憶體介面
  17. */
  18. public interface Memory {
  19. void read();
  20. void write();
  21. }
  22. /**
  23. * DDR8G 的記憶體
  24. */
  25. public class DDR8GMemory implements Memory {
  26. public void read() {
  27. System.out.println(" 使用 DDR8G 的記憶體讀取資料 ....");
  28. }
  29. public void write() {
  30. System.out.println(" 使用 DDR8G 的記憶體寫入資料 ....");
  31. }
  32. }
  33. 類似的 IntelCpu DDR16Memory 類省略了程式碼
  34. /**
  35. 電腦類
  36. */
  37. public class Computer {
  38. private Cpu cpu;
  39. private Memory memory;
  40. private String brand;
  41. ... 省略 get\set
  42. public Computer() {
    }

            public Computer(String brand, Cpu cpu, Memory memory) {
             this.brand = brand;
         this.cpu = cpu;
         this.memory = memory;
            }

            public void start(){
         System.out.println(brand+" 電腦啟動了 ");
         cpu.run();
         memory.read();
         memory.write();
            }
  43. }

 

maven 專案的 resources 目錄下,新增配置檔案:

applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="
  3. xmlns:xsi="
  4. xmlns:context="
  5. xsi:schemaLocation="
  6. /spring-beans.xsd
  7. /spring-context.xsd">
  8. <!-- CPU 物件 -->
  9. <bean id="cpu" class="com.qianfeng.springioc.demo3.IntelCpu"/>
  10. <!--Memory 物件 -->
  11. <bean id="memory" class="com.qianfeng.springioc.demo3.DDR16GMemory"/>
  12. <!-- 電腦物件 -->
  13. <bean id="computer" class="com.qianfeng.springioc.demo3.Computer">
  14. <!-- 屬性的注入 -->
  15. <property name="cpu" ref="cpu"></property>
  16. <property name="memory" ref="memory"></property>
  17. <property name="brand" value=" 小米電腦 "></property>
  18. </bean>
  19. </beans>

配置說明:

<beans> 是根標籤,代表 Spring Java 物件容器

<bean> 標籤代表在容器中建立一個 Java 物件,屬性 id 代表物件名, class 是物件的型別。

在配置檔案中首先建立了一個 cpu 物件和一個 memory 物件,然後建立了一個 computer 物件, computer 中有 Cpu 型別的 cpu 屬性和 Memory 型別 memory 屬性以及 String 型別的 brand 屬性,這裡使用依賴注入的方式給屬性賦值。

<property name="cpu" ref="cpu"></property>

property  指的是物件的屬性, name 是屬性名, ref 是物件引用,這裡引用了前面的 cpu 物件。

<property name="brand" value=" 華碩電腦 "></property>

brand 屬性注入的是數值而不是物件引用,這裡使用 value 注入值。

 

Spring 上下文物件

Spring 容器可以看做是一個 JavaBean 的工廠 BeanFactory BeanFactory 負責建立並儲存各個 JavaBean BeanFactory 的子類有:

1 ClassPathXMLApplicationContext

基於 XML 配置檔案上下文

2 AnnotationConfigApplicationContext

基於註解配置的上下文

3 FileSystemApplicationContext

基於檔案系統的上下文

使用ClassPathXMLApplicationContext的方法:

  1. public class TestComputer {
  2. @Test
  3. public void testComputer(){
  4. // 建立 XML 檔案的應用程式上下文物件
  5. ClassPathXmlApplicationContext cxt =
  6. new ClassPathXmlApplicationContext("applicationContext.xml");
  7. // 透過型別從容器獲得 Java 物件
  8. Computer computer = cxt.getBean(Computer.class);
  9. // 還可以透過物件名獲得物件
  10. //        Computer computer = (Computer) cxt.getBean("computer");
  11. computer.start();
  12. }
  13. }


使用註解配置

Spring IOC 也可以不使用配置檔案,完全透過 Java 程式碼和註解實現配置,這種配置方法程式碼更加簡潔。

常用註解:

@Component

配置到類上面, Spring 容器會自動掃描並新增有該註解類的物件

@Autowired

配置到屬性或 set 方法上,容器會將容器中同型別的物件自動注入到屬性中

@Qualifier

用於給不同的元件設定標識,用於區分多個相同型別的物件

@Value

注入一般型別的值,如: @Value(20)  、  @Value(" 張三 ")

@Configuration

加在配置類上,該類作為 Spring 啟動的入口

@ComponentScan

@Configuration 配合使用,加在配置類上,用於掃描包中所有 @Component 註解的類

  1. DDR8Memory 類和 IntelCpu 類上新增 @Component 註解
  2. 修改 Computer 類:
  3. @Component
  4. public class Computer {
  5. @Value(" 蘋果電腦 ")
  6. private String brand;
  7. @Autowired
  8. private Cpu cpu;
  9. @Autowired
  10. private Memory memory;
  11. ....
  12. }
  13. @Configuration
  14. @ComponentScan("com.qianfeng.springioc.demo4")
  15. public class MyConfig {
  16. public static void main(String[] args) {
  17. // 建立基於註解的上下文物件
  18. AnnotationConfigApplicationContext cxt = new AnnotationConfigApplicationContext(MyConfig.class);
  19. // 獲得 Computer 物件
  20. Computer computer = cxt.getBean(Computer.class);
  21. computer.start();
  22. }
  23. }

總結

本章我們學習了兩種 Spring 的配置方法, XML 配置的好處是:和程式碼耦合性低,容易維護,註解配置的好處是:程式碼簡潔。兩種配置方法的優勢互補,在實際開發過程中一般會使用 XML 和註解混合進行配置。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2650129/,如需轉載,請註明出處,否則將追究法律責任。

相關文章