1. 程式人生 > >@Value值注入及配置檔案元件掃描方式

@Value值注入及配置檔案元件掃描方式

spring配置檔案對應的是父容器,springMVC配置檔案產生的是子容器,前者一般配置資料來源,事務,註解等,當然還可以進一步將一些配置細化到其他xml中;後者一般配置控制層相關的,如靜態資源,檢視解析器等。系統啟動的時候,先初始化父容器,然後初始化子容器。這裡會涉及一個問題,如果配置元件掃描時都配置全元件掃描,就會導致service元件會被掃描兩次,造成事務無法處理。所以最好在springMVC配置檔案中只做controller的掃描,在spring配置檔案中掃描其他元件。
在spring的配置檔案中配置:

<context:component-scan base-package
="com"/>

在springMVC的配置檔案中配置:

<context:component-scan base-package="com.**.controller"/>

這樣就能各司其職了。
在使用中,這兩個配置檔案作用不同。如果要使用@Value注入一些系統配置檔案中的變數時要注意:如果要在controller中使用注入的變數,需要在springMVC的配置檔案中配置:

<context:property-placeholder location="classpath:{your variable file}.properties"/>

如果只在spring的配置檔案中配置,那麼在controller中是不會注入成功的。
測試demo如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml",
"classpath:servlet-dispatcher.xml"})
public class InjecTest {

    @Value("${ly.key}")
    private String key;

    @Test
    public void test(){
        System.out.println("注入的key為:"+key);
    }

基於@Value進行注入時有兩種方式,佔位符和spel表示式

    //佔位符方式
    @Value("${jdbc.url}")
    private String url;
    //SpEL表達方式,其中代表xml配置檔案中的id值configProperties
    @Value("#{configProperties['jdbc.username']}")
    private String userName;

這兩種方式需要在xml中配置時也是不一樣的

    <!--基於佔位符方式 配置單個properties -->
    <!--<context:property-placeholder location="conf/jdbc.properties"/>-->
    <!--基於佔位符方式 配置多個properties -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:config/resource/dev/application.properties</value>
                <value>classpath:config/resource/dev/lyframework.properties</value>
                <value>classpath:config/resource/dev/common.properties</value>
            </list>
      </property>
    </bean>
    <!--基於SpEL表示式 配置多個properties id值為configProperties 提供java程式碼中使用 -->
    <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>classpath:/conf/jdbc.properties</value>
            </list>
        </property>
    </bean>
    <!--基於SpEL表示式 配置單個properties -->
    <!--<util:properties id="configProperties" location="classpath:conf/jdbc.properties"/>-->

相關推薦

@Value注入配置檔案元件掃描方式

spring配置檔案對應的是父容器,springMVC配置檔案產生的是子容器,前者一般配置資料來源,事務,註解等,當然還可以進一步將一些配置細化到其他xml中;後者一般配置控制層相關的,如靜態資源,檢視解析器等。系統啟動的時候,先初始化父容器,然後初始化子容器。

springmvc通過@Value註解讀取Properties配置檔案,junit測試可以取到,但是在業務中無法讀取

最近試著做了個springmvc 專案,在加入 發郵件 功能時遇到的問題。 Spring 通過註解獲取*.porperties檔案的內容,除了xml配置外,還可以通過@value方式來獲取。 @value是需要spring註解掃描的,所以要將spring註解掃描配置中加上實

springmvc與Spring配置檔案掃描元件分開掃描和直接全掃描的區別

在主容器中(applicationContext.xml),將Controller的註解排除掉 <context:component-scan base-package="com">   <context:exclude-filter type="annotation" expression

[大資料]hadoop 聯邦機制 配置檔案

hadoop 聯邦機制 1 原理 即多個ha 聯合組成一套叢集環境,對外提供一致介面【ViewFs】(相當於擴容) 即cluserID 相等 但是相同的datanode服務於不同的namenode。 原理是通過namenodeID和blockPool-id來判別檔案存放的位置

SpringBoot結合Flyway實現資料庫版本管理配置檔案說明

SpringBoot結合Flyway實現資料庫版本管理及配置檔案說明 文章目錄 前言 例項 其它配置 拓展 前言 Flyway是個很好的資料庫版本管理工具,根據版本號順序執行sql檔案,維護一個統一的資料庫,適用於多人協作

keepalived介紹配置檔案詳解

keepalived介紹 Keepalived軟體起初是專為LVS負載均衡軟體設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟體外,還可以作為其他服務(例如:Nginx、Hapr

Nginx實戰之1.1-1.6 Nginx介紹,安裝配置檔案詳解

1.1 Nginx介紹 HTTP協議發展簡史 加粗  https://coding.net/u/aminglinux/p/nginx/git/blob/master/http/version.md  1991年釋出0.9版,只有GET方法,僅支援html,一個連線一個請求 &n

spring中使用@Value註解獲取properties配置檔案中的變數值

在我們專案中往往會使用到properties配置檔案來定義一些跟系統環境有關的配置,因此今天我們學習使用spring中的@Value註解來快速方便地將我們配置檔案中的變數值賦值給java類的屬性值。 1.首先我們先在專案中建一個properties配置檔案,然後定義好我們需要的變數名和對應的

NTP時間服務相關基礎配置檔案詳解

NTPS時間服務的應用場景 在我們搭建伺服器叢集的時候,各個主機時間不同步會導致各種未知bug,我了避免這種事情的發生,我們就要保證各個伺服器的時間是一致的,而做一臺時間伺服器就能夠輕鬆地保證叢集中各個節點的時間時刻保持一致。 計算機時間 系統時間:是有Linux K

ubuntu 1804 安裝hadoop 2.7.7配置檔案說明

建立hadoop使用者同時指定使用 /bin/bash 作為 hadoop的shell: useradd -m hadoop -s /bin/bash 為hadoop 設定密碼。 sudo passwd hadoop 為 hadoop 使用者增加管理員許可權,方便部署 sudo adduser ha

Spring Boot專案中@Value取不到配置檔案中的配置引數值

Spring Boot專案中@Value取不到配置檔案中的配置引數值 原取值方式如下所示: @Value("${authox.sql.url}") private static String url; @Value("${authox.sql.username}") private stati

Linux軟體之怎樣把軟體徹底刪除乾淨?如何徹底刪除軟體配置檔案?(Ubuntu)

文章目錄 操作 命令詳細說明 dpkg -l grep "^rc" awk '{print $2}' xargs aptitude -y purge 操作

Spring Boot中路徑配置檔案讀取問題

編譯時src/main/java中*.java檔案會被編譯成*.class檔案,在classpath中建立對應目錄及class檔案           src/main/resources目錄中的檔案會被複制到classpath目錄中 imp

Hibernate學習——測試環境搭建配置檔案書寫是否正確

測試程式碼: @Test public void testfun1() { // 建立讀取配置檔案類 Configuration cf = new Configuration(); // 讀取配置檔案 cf.configure(); // 建立SessionFacto

建立SpringMVC專案配置檔案(配置式)

配置式(不使用註解):在springmvc的配置檔案中,使用標籤建立物件 步驟: 1.新建 web 專案 2.匯入jar包: 1)spring的核心jar:spring-beans.jar,spring-core.jar,spring-context.jar,s

yum常用命令配置檔案詳解

yum 屬於軟體包管理工具的一種,可以自動解決RPM包與包的依賴關係 它是紅帽系的shell軟體管理器,能夠從指定的伺服器自動下載RPM包並安裝,可自動處理依賴關係,無須再去解決RPM包令人嫌棄的依賴關係。 yum工作原理 yum在接受到安裝命令之後,會根據本地的yu

ubootenv工具fw_printenv配置檔案fw_env.config

希望朋友們多多指點,好的技術或心得一起分享:     uboot向kernel傳參機制以及kernel如何解析cmdline引數大家可以參考其他前輩的博文,這方面的講解十分詳盡。     在這裡我總結以下自己在uboot自定義一個引數並從kernel中取得的方法:

LNMP安裝目錄配置檔案位置

LNMP相關軟體安裝目錄 Nginx 目錄: /usr/local/nginx/ MySQL 目錄 : /usr/local/mysql/MySQL資料庫所在目錄:/usr/local/mysql/var/MariaDB 目錄 : /usr/local/mariadb/MariaDB資料庫

Struts2執行流程配置檔案載入順序

1 Struts2執行流程 當用戶訪問某一個Action的時候,先經過核心過濾器(web.xml中配置),在核心過濾器中執行一組攔截器(這組攔截器實現部分功能,在Struts2的核心包中的Struts-default.xml檔案中),執行目標Action,根據Action的返回值,進行

Nginx安裝配置檔案nginx.conf詳解

1、安裝Nginx 在安裝Nginx之前,需確保系統已經安裝了gcc、 openssl-devel、 pcre-devel和zlib-devel軟體庫。 下面是Nginx安裝過程: wget http://nginx.org/download/nginx-1.0.14.tar.gz tar z