1. 程式人生 > >自動裝配、JavaConfig、XML 三種方案之間,怎麼匯入和混合配置?

自動裝配、JavaConfig、XML 三種方案之間,怎麼匯入和混合配置?

在 Spring 中,這些配置方案都不是互斥的。完全可以將 JavaConfig 的元件掃描自動裝配/或 XML 配置混合在一起。

Q:如何在 JavaConfig 中引用 XML 配置?

Q:怎麼將兩個 JavaConfig 類組合在一起?
A:①、使用 @Import 註解匯入

package soundsystem;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CDConfig { @Bean public CompactDisc compactDisc(){ return new SgtPeppers(); } }
package soundsystem;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import(CDConfig.class) public class CDPlayerConfig { @Bean public CDPlayer cdPlayer(CompactDisc compactDisc) { return new CDPlayer(compactDisc); } }

②、一種更好的方式:建立一個更高級別的 SoundSystemConfig,並在這個類中使用 @Import 將兩個配置類組合在一起

package soundsystem;

import org.springframework.context
.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @Import({CDPlayerConfig.class, CDConfig.class}) public class SoundSystemConfig { }

Q:該如何讓 Spring 同時載入 通過 XML 來配置的 BlankDisc 和 其他基於 Java 的配置呢?
A:@ImportResource 註解。假定 BlankDisc 定義在名為 cd-config.xml 檔案中,該檔案位於根類路徑下,那麼可以修改 SoundSystemConfig ,讓它使用 @ImportResource 註解。

BlankDisc.java 的定義請參考前一篇。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:c="http://www.springframework.org/schema/c"
       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="compactDisc"
          class="soundsystem.BlankDisc"
          c:_0="titleValue"
          c:_1="artist">
        <constructor-arg>
            <list>
                <value>tracks01</value>
                <value>tracks02</value>
                <value>tracks03</value>
            </list>
        </constructor-arg>
    </bean>

</beans>
package soundsystem;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportResource;

/**
 * 兩個 bean —— ①、配置在 JavaConfig 中的 CDOlayer 以及 ②、配置在 XML 中的 BlankDisc
 * 都會被載入到 Spring 容器中。因為 CDCPlayer 中帶有 @Bean 註解的方法接受一個 CompactDisc 作為引數,
 * 因此 BlankDisc 將會裝配起來,此時與它是通過 XML 配置的沒有任何關係。
 */
@Configuration
@Import({CDPlayerConfig.class)
@ImportResource("classpath:cd-config.xml")
public class SoundSystemConfig {
}

Q:如何在 XML 配置中引用 JavaConfig?

A:在 JavaConfig 配置中,展示瞭如何使用 @Import 和 @ImportResource 來拆分 JavaConfig 類。
在 XML 中,我們使用 import 元素來拆分 XML 配置。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:c="http://www.springframework.org/schema/c"
       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">

    <!--
        我們將 BlankDisc 配置在 JavaConfig中,CDPlayer 繼續配置在 XML 中
        這時,<import>元素只能匯入其他的 XML 配置檔案,為了將 JavaConfig 類匯入到 XML 配置中,我們使用 <bean> 元素。
     -->
    <bean class="soundsystem.CDConfig"/>

    <bean id="cdPlayer"
        class="soundsystem.CDPlayer"
        c:compactDisc-ref="compactDisc"/>

</beans>

我們也可以建立一個更高層次的配置檔案,這個檔案不宣告任何的bean,只是負責將兩個或者更多的配置組合起來。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:c="http://www.springframework.org/schema/c"
       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 class="soundsystem.CDConfig"/>

    <import resource="cdplayer-config.xml"/>

</beans>

不管使用 JavaConfig 還是使用 XML 進行裝配,我通常都會建立一個根配置,這個配置會將兩個或更多的裝配類和/或 XML 檔案組合起來
我也會在根配置中啟用元件掃描(通過 context:component-scan 元素 或 @ComponentScan)。

相關推薦

自動裝配JavaConfigXML 方案之間怎麼匯入混合配置

在 Spring 中,這些配置方案都不是互斥的。完全可以將 JavaConfig 的元件掃描和自動裝配/或 XML 配置混合在一起。 Q:如何在 JavaConfig 中引用 XML 配置? Q:怎麼將兩個 JavaConfig 類組合在一起? A:①

xml檔案的解析domSAXdom4j

目錄 一、XML檔案 student.xml <?xml version="1.0" encoding="UTF-8"?> <!-- 內嵌 --> <!DOCTYPE students [ <!ELEMENT

Spring裝配Bean的方式+匯入混合配置

[toc] # Spring IoC與bean > A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container. Otherwise, a bean is simp

day06.Hadoop快速入門&雲服務模式IaaSPaaSSaaS【大資料教程】

day06.Hadoop快速入門&雲服務三種模式IaaS,PaaS和SaaS【大資料教程】1. HADOOP背景介紹1.1 什麼是HADOOP1). HADOOP是apache旗下的一套開源軟體

spring學習總結——裝配Bean學習四(匯入混合配置

情景:在典型的Spring應用中,我們可能會同時使用自動化和顯式配置(JavaConfig)或者XML配置,幸好在Spring中,這些配置方案都不是互斥的。你儘可以將JavaConfig的元件掃描和自動裝配和/或XML配置混合在一起。   關於混合配置,第一件需要了解的事情就是在自動裝配時,它並不在意要裝配

Spring第二篇篇的補充【JavaConfig配置c名稱空間裝載集合JavaConfigXML組合】

前言 在寫完Spring第二和第三篇後,去讀了Spring In Action這本書…發現有知識點要補充,知識點跨越了第二和第三篇,因此專門再開一篇博文來寫… 通過java程式碼配置bean 由於Spring的自動裝配並不能將第三方庫元件裝配到應用中,於是

限流消峰的辦法

鏈接 png ret unit 做了 pan mit append vertex 互聯網服務賴以生存的根本是流量, 產品和運營會經常通過各種方式來為應用倒流,比如淘寶的雙十一等,如何讓系統在處理高並發的同時還是保證自身系統的穩定,通常在最短時間內提高並發的做法就是加機器,

apache分別基於方案實現tomcat的代理負載均衡及會話綁定

tomcat apacheapache分別基於mod_proxy_ajp, mod_proxy_http, mod_jk三種方案實現代理、負載均衡、會話綁定及Tomcat session cluster1、nginx, haproxy, apache(mod_proxy_ajp, mod_proxy_http

內參外參畸變參數參數與相機的標定方法與相機坐標系的理解

整體 沒有 建立 csdn ext 位置 nbsp ons 包含 博客轉載自:http://blog.csdn.net/yangdashi888/article/details/51356385 相機的內參數是六個分別為:1/dx、1/dy、r、u0、v0、f opencv

日常學習隨筆-數組單鏈表雙鏈表形式實現棧結構的基本操作

ext return lse efi CA 需要 kde 當前 default 一、棧結構   棧(stack)是限制插入和刪除只能在一個位置上的表,該位置是 表的末端,叫做棧的頂(Top)。對棧的基本操作有push(進棧),pop(出棧),peak(棧頂元素),size(

【小家java】POP(面向過程程式設計)OOP(面向物件程式設計)AOP(面向切面程式設計)程式設計思想的區別聯絡

相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9

用GsonFastJsonAndroid原生類方式做Json節點解析

一、用Gson做節點解析 json: {'flag':true,'data':{'name':'張三','age':18,'sex':true}} 步驟 : 獲得 解析者 JsonParser parser = new JsonParser(); 獲

簡單談談我對Java 中 Class.forName()Class.class例項物件.getClass() 獲取位元組碼物件的理解?(內含程式碼分析總結)

首先得明白的知識點: 1靜態屬性初始化載入類的時候初始化( 只會初始化一次),而非靜態屬性的初始化就是new類例項物件的時候初始化的 2三種獲取位元組碼物件的共同點就是都會預先的判斷記憶體是否已經載入此類,弱沒有載入,則會把.class檔案裝入到記憶體,若是載入了,則會根據class檔案生成例

vue+element ui專案總結點(一)selectCascader級聯選擇器encodeURIdecodeURI轉碼解碼一級mockjs用法路由懶載入方式

不多說上程式碼: <template> <div class="hello"> <h1>{{ msg }}</h1> <p>Element UI簡單Cascader級聯選擇器使用</p> <

多執行緒基礎概念實現執行緒方法中斷執行緒方法以及執行緒狀態轉化

1、CPU核心數和執行緒數的關係 1:1的關係,引入超執行緒之後,就是1:2 2、cpu時間輪轉機制,即RR排程 3、程序和執行緒 程序:程式執行資源分配最小單位,程序內部有多個執行緒,多個執行緒之間會共享程序資源 執行緒:CPU排程的最小單位 4、並行和併發

Java語言中ListSetMap集合之間的區別

List、Set是實現了Collection介面的子介面;而Map是另一個集合介面。 1.  三者之間的區別如下: 1) 元素重複性: ① List允許有重複的元素。任何數量的重複元素都可以在不影響現有重複元素的值及其索引的情況下插入到List集合中; ② Set集合

Laravel實現小程式使用openid登陸手機號驗證碼登陸賬戶密碼登陸登陸方式

目前開發小程式,按需求要實現3種登陸方式: 1、微信授權登陸 2、賬戶密碼登陸 3、手機號、驗證碼登陸 我使用laravel自帶的Auth認證機制,通過attempt方法進行賬戶驗證,但是預設的認證機制必須包含password欄位,而我的第1、3種登陸方式都沒有

Spring中Bean的自動裝配之@Resource@Inject

Spring還支援使用@Resource(JSR250)和@Inject(JSR330)[java規範的註解]  *         @Resource:  *             可以和@Autowired一樣實現自動裝配功能;預設是按照元件名稱進行裝配的;  *   

Java模擬最短作業優先時間片輪轉最高響應比程序排程演算法

本次試驗是使用程式來模擬作業系統中程序排程的三種不同的排程策略,分別為最短作業有限、時間片輪轉、最高響應比。 模擬的情況下,程序數為8,程序所需執行時間為隨機產生的整數,單位為1S,預設程序同時到達。 以下是實驗的程式碼: Process.java是測試類,用於生成程序列表

有了html頁面進行二次顯示通過htmlJavaScriptjQuery的ajax技術我可以實現任何介面效果

當前j2ee的web工程開發, 最常用的前端顯示技術,有兩種:html、jsp。 場景: 以html為例,當用戶執行了某個操作,j2ee的web工程反饋了一個html頁面給使用者(其實不是這麼簡單,中間有渲染的過程,這裡略過,就當使用者得到了一個html頁面)。例如點選“新