Java必備乾貨:Spring框架之IOC的基本配置
Spring 框架之 IOC 的基本配置 , 前言,上一章我們學習了 Spring 的 IOC 特性以及 IOC 的實現原理:註解和反射,本章我們將學習如何在 Spring 中使用 IOC 。
Spring 的 IOC 配置
Spring 最重要的特性是 IOC 控制反轉,利於 IOC 我們能降低物件之間的耦合性。
IOC 需要透過一定的配置實現,配置方法分為:
1) 使用 xml 檔案配置
2)使用註解配置
使用 Spring 的基本功能,必須先匯入 Spring 的依賴:
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- <version>5.1.5.RELEASE</version>
- </dependency>
Spring Context :向 Spring 框架提供上下文資訊。 Spring 上下文包括企業服務,例如 JNDI 、 EJB 、電子郵件、國際化、校驗和排程功能。它包含 Spring Core 元件,能實現 IOC 的核心功能。
使用 xml 檔案配置
- /**
- * CPU 介面
- */
- public interface Cpu {
- void run();
- }
- /**
- * AMD 的 CPU
- */
- public class AMDCpu implements Cpu {
- public void run() {
- System.out.println("AMD 的 CPU 正在執行 ....");
- }
- }
- /**
- * 記憶體介面
- */
- public interface Memory {
- void read();
- void write();
- }
- /**
- * DDR8G 的記憶體
- */
- public class DDR8GMemory implements Memory {
- public void read() {
- System.out.println(" 使用 DDR8G 的記憶體讀取資料 ....");
- }
- public void write() {
- System.out.println(" 使用 DDR8G 的記憶體寫入資料 ....");
- }
- }
- 類似的 IntelCpu 和 DDR16Memory 類省略了程式碼
- /**
- * 電腦類
- */
- public class Computer {
- private Cpu cpu;
- private Memory memory;
- private String brand;
- ... 省略 get\set
-
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();
} - }
在 maven 專案的 resources 目錄下,新增配置檔案:
applicationContext.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="
- xmlns:xsi="
- xmlns:context="
- xsi:schemaLocation="
- /spring-beans.xsd
- /spring-context.xsd">
- <!-- CPU 物件 -->
- <bean id="cpu" class="com.qianfeng.springioc.demo3.IntelCpu"/>
- <!--Memory 物件 -->
- <bean id="memory" class="com.qianfeng.springioc.demo3.DDR16GMemory"/>
- <!-- 電腦物件 -->
- <bean id="computer" class="com.qianfeng.springioc.demo3.Computer">
- <!-- 屬性的注入 -->
- <property name="cpu" ref="cpu"></property>
- <property name="memory" ref="memory"></property>
- <property name="brand" value=" 小米電腦 "></property>
- </bean>
- </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的方法:
- public class TestComputer {
- @Test
- public void testComputer(){
- // 建立 XML 檔案的應用程式上下文物件
- ClassPathXmlApplicationContext cxt =
- new ClassPathXmlApplicationContext("applicationContext.xml");
- // 透過型別從容器獲得 Java 物件
- Computer computer = cxt.getBean(Computer.class);
- // 還可以透過物件名獲得物件
- // Computer computer = (Computer) cxt.getBean("computer");
- computer.start();
- }
- }
使用註解配置
Spring 的 IOC 也可以不使用配置檔案,完全透過 Java 程式碼和註解實現配置,這種配置方法程式碼更加簡潔。
常用註解:
@Component
配置到類上面, Spring 容器會自動掃描並新增有該註解類的物件
@Autowired
配置到屬性或 set 方法上,容器會將容器中同型別的物件自動注入到屬性中
@Qualifier
用於給不同的元件設定標識,用於區分多個相同型別的物件
@Value
注入一般型別的值,如: @Value(20) 、 @Value(" 張三 ")
@Configuration
加在配置類上,該類作為 Spring 啟動的入口
@ComponentScan
和 @Configuration 配合使用,加在配置類上,用於掃描包中所有 @Component 註解的類
- 在 DDR8Memory 類和 IntelCpu 類上新增 @Component 註解
- 修改 Computer 類:
- @Component
- public class Computer {
- @Value(" 蘋果電腦 ")
- private String brand;
- @Autowired
- private Cpu cpu;
- @Autowired
- private Memory memory;
- ....
- }
- @Configuration
- @ComponentScan("com.qianfeng.springioc.demo4")
- public class MyConfig {
- public static void main(String[] args) {
- // 建立基於註解的上下文物件
- AnnotationConfigApplicationContext cxt = new AnnotationConfigApplicationContext(MyConfig.class);
- // 獲得 Computer 物件
- Computer computer = cxt.getBean(Computer.class);
- computer.start();
- }
- }
總結
本章我們學習了兩種 Spring 的配置方法, XML 配置的好處是:和程式碼耦合性低,容易維護,註解配置的好處是:程式碼簡潔。兩種配置方法的優勢互補,在實際開發過程中一般會使用 XML 和註解混合進行配置。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2650129/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java乾貨分享Spring框架之IOC原理程式設計師JavaSpring框架
- 乾貨分享之Spring框架原始碼解析01-(xml配置解析)Spring框架原始碼XML
- 面試必備 之 Java 集合框架面試Java框架
- 雲端乾貨|降本必備—彈性伸縮的基本原理
- 好程式設計師Java分享Spring框架之AOP的基本配置程式設計師JavaSpring框架
- Spring框架之IOC介紹Spring框架
- Guice:Java IOC框架 挑戰SpringGUIJava框架Spring
- 【乾貨乾貨】hyperledger fabric 之動態新增組織/修改配置 (Fabric-java-sdk) 下Java
- java Spring框架IOC和AOP的實現原理JavaSpring框架
- Java 開發者 必備的工具 和 框架Java框架
- Java之Spring基礎與IoCJavaSpring
- Spring框架IOC容器Spring框架
- spring原始碼深度解析— IOC 之 容器的基本實現Spring原始碼
- 【乾貨】Linux運維人員必備的實用工具!Linux運維
- Spring IOC XML配置SpringXML
- Spring框架系列(7) - Spring IOC實現原理詳解之IOC初始化流程Spring框架
- Spring框架-3(IOC下)Spring框架
- 簡易版的Spring框架之IOC簡單實現Spring框架
- Spring5原始碼解析_IOC之容器的基本實現Spring原始碼
- Nagios備忘之基本配置iOS
- 實用乾貨:程式設計師必備的常用英語詞彙程式設計師
- Java 乾貨之深入理解Java泛型Java泛型
- Java開發必讀,談談對Spring IOC與AOP的理解JavaSpring
- Spring框架之IOC/DI(控制反轉/依賴注入)Spring框架依賴注入
- 乾貨滿滿!!!面試必備OJ題:連結串列篇(一)面試
- java乾貨筆記之變數4Java筆記變數
- Spring框架系列(6) - Spring IOC實現原理詳解之IOC體系結構設計Spring框架
- 乾貨分享!三大Java框架的優缺點對比Java框架
- Spring IOC容器基本原理Spring
- Java程式設計師必備的工具和框架Java程式設計師框架
- 手寫Spring ioc 框架,狠狠的“Spring 原始碼Spring框架原始碼
- Spring框架系列(3) - 深入淺出Spring核心之控制反轉(IOC)Spring框架
- Spring框架的基本作用Spring框架
- Spring IOC原始碼分析之-重新整理前的準備工作Spring原始碼
- 分享實用乾貨:辦公必備的6個軟體,大神都在用!
- Java開發三大框架,你必需要知道的IT乾貨!Java框架
- Spring基於註解的IoC配置Spring
- Spring入門配置(一) - IOCSpring