• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 運行時值注入

    標簽: SpringInActionFourthEdition  java  spring  bean

    直接注入

    Bean直接注入示例:

    @Bean("blankDisc1")
    @Profile("dev")
    @Primary
    public BlankDisc getDevBlankDiscPrimary() {
    	BlankDisc blankDisc = new BlankDisc();
    	blankDisc.setTitle("Sgt. Pepper's Lonely Hearts Club Band dev Primary");
    	List<String> tracks = new ArrayList<>();
    	tracks.add("Sgt. Pepper's Lonely Hearts Club Band track dev Primary");
    	blankDisc.setTracks(tracks);
    	return blankDisc;
    }
    

    XML直接注入示例:

    <bean id="blankDisc"
    	class="com.zachary.soundsystem.impl.BlankDisc"
    	p:title="Sgt. Pepper's Lonely Hearts Club Band"
    	p:tracks-ref="trackList" />
    

    注入外部的值

    創建app.properties文件

    disc.title=Sgt. Pepper's Lonely Hearts Club Band
    disc.artist=The Beatles
    

    重Environment中獲取外部注入值

    @Configuration
    @PropertySource("classpath:app.properties")
    public class RuntimeInjectCompactDiscConfig {
    	
    	@Autowired
    	Environment env;
    	
    	@Bean
    	public BlankDisc setBlankDisc() {
    		BlankDisc blankDisc = new BlankDisc();
    		blankDisc.setTitle(env.getProperty("disc.title"));
    		blankDisc.setArtist(env.getProperty("disc.artist"));
    		blankDisc.setTracks(new ArrayList<>());
    		return blankDisc;
    	}
    
    }
    

    Environment中方法:

    • String getProperty(String key):返回一個String類型值
    • String getProperty(String key, String defaultValue):返回一個String類型值,沒有值時取默認值
    • T getProperty(String key, Class type):返回一個指定類型的值
    • T getPropety(String key, Class type, T defaultValue):返回一個指定類型的值,沒有時取默認值
    • String getRequiredProperty(String key):返回一個String類型的值,沒有定義時拋IllegalStateExceptio異常
    • T getRequiredProperty(String key, Class targetType):返回一個指定類型的值,沒有定義時拋IllegalStateExceptio異常
    • boolean containsProperty(String key):判斷某個屬性是否存在
    • String[] getActiveProfiles():返回**的profile名稱的數組
    • String[] getDefaultProfiles():返回默認profile名稱的數組
    • boolean acceptsProfiles(Profiles profiles):如果environment支持給定的profile,返回true

    小知識:Environment 除了可以注入外,還可以從ConditionContext中獲得。

    解析占位符 “&{…}”

    為了使用占位符,我們需要配置一個PropertyPlacehokderConfigurer bean或者PropertySourcesPlaceholderConfigurer bean。從Spring3.1開始,推薦使用PropertySourcesPlaceholderConfigrer,因為它是基于Spring Environment及其屬性源解析占位符。

    @Bean在Java中配置PropertySourcesPlaceholderConfigrer

    示例的代碼:

    @Bean
    static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
    	return new PropertySourcesPlaceholderConfigurer();
    }
    

    XML配置PropertySourcesPlaceholderConfigrer

    context命名空間

    xmlns:context="http://www.springframework.org/schema/context"
    http://www.springframework.org/schema/context
    https://www.springframework.org/schema/context/spring-context.xsd
    

    在這里插入圖片描述

    示例代碼:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd 
            http://www.springframework.org/schema/context
    		https://www.springframework.org/schema/context/spring-context.xsd">
    	
    	<context:property-placeholder/>
    </beans>
    

    Java解析占位符

    代碼示例

    @Bean
    @Qualifier("setBlankDisc2")
    public BlankDisc setBlankDisc2(@Value("${disc.title}") String title, @Value("${disc.artist}") String aritst) {
    	BlankDisc blankDisc = new BlankDisc();
    	blankDisc.setTitle(title + "setBlankDisc2");
    	blankDisc.setArtist(aritst + "setBlankDisc2");
    	blankDisc.setTracks(new ArrayList<>());
    	return blankDisc;
    }
    

    XML解析占位符

    代碼示例
    xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:util="http://www.springframework.org/schema/util"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd 
            http://www.springframework.org/schema/util 
            https://www.springframework.org/schema/util/spring-util.xsd
            http://www.springframework.org/schema/context
    		https://www.springframework.org/schema/context/spring-context.xsd">
    
    	<context:property-placeholder/>
    	
    	<util:list id="trackList">
    		<value>Sgt. Pepper's Lonely Hearts Club Band</value>
    		<value>Sgt. Pepper's Lonely Hearts Club Band2</value>
    		<value>Sgt. Pepper's Lonely Hearts Club Band3</value>
    		<value>Sgt. Pepper's Lonely Hearts Club Band4</value>
    	</util:list>
    	
    	<bean id="blankDisc"
    		class="com.zachary.soundsystem.impl.BlankDisc"
    		p:title="${disc.title}"
    		p:artist="${disc.artist}"
    		p:tracks-ref="trackList" />
    </beans>
    

    java配置類

    @Configuration
    @PropertySource("classpath:app.properties")
    @ImportResource("classpath:cd-config.xml")
    public class RuntimeInjectCompactDiscConfig {
    
    	@Autowired
    	Environment env;
    }
    

    測試類

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes=RuntimeInjectCompactDiscConfig.class)
    public class RuntimeInjectCompactDiscConfigTest {
    
    	@Autowired
    	BlankDisc blankDisc;
    	
    	@Test
    	public void setBlankDiscTest() {
    		blankDisc.play();
    	}
    }
    
    版權聲明:本文為ZacharyZheng1原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/ZacharyZheng1/article/details/106985051

    智能推薦

    函數運行時堆棧

    每個函數在運行時都要使用運行時堆棧(棧幀),用于存儲局部變量和返回地址,下面我就以簡單的求和函數來分析一下堆棧到底怎樣完成的: 下面為函數的代碼: 簡單解釋一下,ebp和esp是兩個寄存器,分別用來保存這個棧的棧底和棧頂指針 要研究函數的調用過程,就必須對應匯編代碼。...

    Android——運行時權限

    需要在運行時申請的權限(Android 6.0 以后) 參考:《第二行代碼》 申請 請求應用權限:https://developer.android.google.cn/training/permissions/requesting.html 在AndroidManifest.xml中聲明要申請的權限。 在Activity里判斷。 在onRequestPermissionResult () 中處理...

    程序運行時間

        這一題其實的算法并不是很難,但是之所以貼到這里來,主要是這里設計幾個基本功的問題。這題有兩個點引起了我的注意。第一個點就是如何對一個數四舍五入。該題中的做法很好 :      k = (int)(1.0 * (c2 - c1) / ctk + 0.5)     ...

    Android 運行時權限

    半年前換過手機之后,就發現許多軟件在安裝之后已經授權過的內容,實際使用的過程中,會再次向我詢問權限。這幾天在開發的過程中,也遇到了明明在AndroidManifest.xml文件中申請過權限了,可是程序依舊拋錯,沒有權限的問題。調查以后發現,Android在6.0系統中引用了運行時權限這個功能,從來更好的保護用戶的安全和隱私。 Android將權限歸為兩類,一類是普通權限,一類是特殊權限。對于不會...

    淺談Runtime運行時

    runtime runtime又叫運行時,是一套底層的c語言api,其為iOS內部核心之一。OC是動態運行時語言,它會將一些工作放在代碼運行時去處理,而非編譯時,比如動態的遍歷屬性和方法,動態的添加屬性和方法,動態的修改屬性和方法等。 了解runtime,首先要先了解它的核心--消息傳遞。 消息傳遞 消息直到運行時才會與方法實踐綁定起來。 一個實例對象調用實例方法,像這樣[obj doSometh...

    猜你喜歡

    Android運行時權限

    Android運行時權限 簡介:Android 6.0 以后,對于一些用戶隱私權限總會在第一次提示用戶是否授予權限。 優點: 更好的保護了用戶的隱私。 給了程序向用戶說明權限的作用。 可以防止一些惡意程序盜取用戶后者手機信息,增強了Android系統的安全性。 Android 6.0 將權限分為兩類: 普通權限:不需要單獨申請,直接在Manifest里注冊即可。 危險權限&危險權限組:危險...

    flink運行時架構

    flink作為計算引擎,在不同的環境中有著不一樣的運行架構,下面我們簡單說兩種架構,standalone模式和yarn 1.standalone模式 作業管理器(簡稱JM),控制一個流式應用程序的主進程,是一個jvm進程,也就是說,每一個流式處理都會有一個對應的JM 這個流程的感覺就像是一個三口之家,孩子是客戶端,母親是JM,父親是TM。當孩子需要一個東西,他會首先找到他媽媽說,需要這個東西,當他...

    Java 運行時異常

    Java 運行時異常 Java 的異常分為 檢查型異常(CheckedException) 以及 運行時異常(RuntimeException)。 其中檢查型異常必須被顯式的處理,如果沒有對其進行處理,將無法通過編譯。   目錄 Java 運行時異常 RuntimeException 源碼 繼承類圖 子類 常見的幾個運行時異常 下面我們先看一下 RuntimeException 的源碼 ...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    精品国产乱码久久久久久蜜桃不卡