亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Spring高級(jí)裝配之運(yùn)行時(shí)注入

ZweiZhao / 2963人閱讀

摘要:原文地址運(yùn)行時(shí)注入與硬編碼注入是相對(duì)的。硬編碼注入在編譯時(shí)就已經(jīng)確定了,運(yùn)行時(shí)注入則可能需要一些外部的參數(shù)來解決。提供的兩種在運(yùn)行時(shí)求值的方式屬性占位符表達(dá)式語言注入外部的值使用注解可以引入文件,使用其中的值。

原文地址:http://blog.gaoyuexiang.cn/Sp...

運(yùn)行時(shí)注入與硬編碼注入是相對(duì)的。硬編碼注入在編譯時(shí)就已經(jīng)確定了,運(yùn)行時(shí)注入則可能需要一些外部的參數(shù)來解決。

Spring提供的兩種在運(yùn)行時(shí)求值的方式:

屬性占位符(Property placeholder)

Spring表達(dá)式語言(SpEL)

注入外部的值

使用@PropertySource注解可以引入.properties文件,使用其中的值。

@Configuration
@PropertySource("classpath:jdbc.properties")
public class JDBCConfig {
    @Autowired
    Environment env;
    
    @Bean
    public DataSource dataSource() {
        env.getProperties("driver");
        ...
    }
}
深入了解Spring中的Environment

上例的Environment有如下方法獲取屬性

String getProperty(String key);

String getProperty(String key, String defaultValue);

T getProperty(String key, Class type);

T getProperty(String key, Class type, T defaultValue);

這幾個(gè)重載方法的作用顧名思義。其中第一、三個(gè)方法獲取一個(gè)不存在的屬性時(shí),會(huì)拋出IllegalStateException異常。

可以使用containsProperty(String key)方法查看是否存在某個(gè)屬性。

其他相關(guān)方法:

Class getPropertyAsClass(String key, Class targetType) : 將獲取的屬性轉(zhuǎn)換為類

String[] getActiveProfiles() : 返回激活profile名稱的數(shù)組

String[] getDefaultProfiles() : 返回默認(rèn)profile名稱的數(shù)組

boolean acceptsProfiles(String... profiles) : 如果environment支持給定的profile,則返回true

解析屬性占位符

使用占位符,可將屬性定義到外部的.properties文件中,然后使用占位符插入到bean中。占位符使用${...}包裝屬性名稱。

Java配置中使用@Value注解。

public BlankDisc(@Value("${disc.title}") String title,
            @Value("${disc.artist}") String artist) {
    this.title = title;
    this.artist = artist;
}

使用占位符必須配置一個(gè)PropertySourcesPlaceholderConfigurer bean,它能夠基于Spring Environment及其屬性來解析占位符。

@Bean
public PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}
使用Spring表達(dá)式語言進(jìn)行裝配

SpEL主要特性:

使用beanID來引用bean

訪問對(duì)象的屬性和方法

可對(duì)值進(jìn)行算數(shù)、關(guān)系和邏輯運(yùn)算

正則表達(dá)式匹配

集合操作

SpEL還可以用在DI之外的地方

SpEL樣例

SpEL表達(dá)式要放在#{ ... }中,里面的"..."就是SpEL表達(dá)式。

#{1}

常量,結(jié)果始終為1

#{T(System).currentTimeMillis()}

T()表達(dá)式會(huì)將java.lang.System視為Java中對(duì)應(yīng)的類型,然后調(diào)用其方法,獲取當(dāng)前時(shí)間戳。

#{dataSource.user}

dataSource為聲明的其他bean,這里可以獲取它的屬性user

#{systemProperties["username"]}

通過systemProperties對(duì)象獲取系統(tǒng)屬性

表示字面量

可表示的字面量有int,float/double,String,boolean,其中浮點(diǎn)值可以用科學(xué)技術(shù)法表示:#{6.18E3}

引用bean、屬性和方法
引用對(duì)象 表達(dá)式
bean #{dataSource}
bean"s field #{dataSource.user}
bean"s method #{dataSource.getPassword()}
bean"s method"s method #{dataSource.getPassword().toUpperCase()}

如果方法返回值為null,第四種情況會(huì)拋出NullPoniterException??梢允褂茫?/p>

#{dataSource.getPassword()?.toUpperCase()}

其中的?.運(yùn)算符能夠在訪問前確保不為null,否則返回null。

在表達(dá)式中使用類型

使用T()表達(dá)式來訪問Java類中的static方法和常量,在括號(hào)內(nèi)的是類名,返回一個(gè)Class對(duì)象,然后調(diào)用其方法和常量。

SpEL運(yùn)算符
運(yùn)算符類型 運(yùn)算符
算數(shù)運(yùn)算 +, -, *, /, %, ^
比較運(yùn)算 <, >, ==, <=, >=, lt, gt, eq, le, ge
邏輯運(yùn)算 and, or, not,
條件運(yùn)算 ?: (ternary), ?: (Elvis)
正則表達(dá)式 matches

Elvis運(yùn)算符

利用三元運(yùn)算符來檢查場景:#{disc.title ?: "Rattle and Hum"},當(dāng)disc.titlenull時(shí),返回"Rattle and Hum"。

名稱的來歷據(jù)說是因?yàn)??"長得像貓王的頭發(fā)。。。

正則表達(dá)式

正則表達(dá)式利用matches來支持正則匹配。

計(jì)算集合

引入一個(gè)元素 : #{jukebox.songs[4].title}

隨機(jī)選取 : #{jukebox.songs[T(Math).random() * jukebox.songs.size()].title}

String中獲得char : #{"This is a test"[2]}

使用.?[]進(jìn)行過濾,得到符合條件的子集 : #{jukebox.songs.?[artist eq "Aerosmith"]}

使用.^[].$[]進(jìn)行過濾,得到第一個(gè)和最后一個(gè)匹配項(xiàng)

使用.![]從集合的每個(gè)成員選擇特定屬性放入新集合中 : #{jukebox.songs.![title]}

最后四個(gè)表達(dá)式有點(diǎn)像lambda表達(dá)式

SpEL的表達(dá)式可以相互組合使用。

更多Spring學(xué)習(xí)筆記:https://github.com/kbyyd24/spring.demo.test/issues

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/65048.html

相關(guān)文章

  • Spring - 高級(jí)裝配

    摘要:高級(jí)裝配條件化的自動(dòng)裝配與歧義性的作用域表達(dá)式語言環(huán)境與可以為不同的環(huán)境提供不同的數(shù)據(jù)庫配置加密算法等注解可以在類級(jí)別和方法級(jí)別,沒有指定的始終都會(huì)被創(chuàng)建的方式配置不同環(huán)境所需要的數(shù)據(jù)庫配置會(huì)搭建一個(gè)嵌入式的數(shù)據(jù)庫模式定義在測試數(shù)據(jù)通過加 高級(jí)裝配 Spring profile 條件化的bean 自動(dòng)裝配與歧義性 bean的作用域 Spring表達(dá)式語言 環(huán)境與profile p...

    binta 評(píng)論0 收藏0
  • 看起來很長但還是有用的Spring學(xué)習(xí)筆記

    摘要:關(guān)于依賴注入注入的注解提供的注解不僅僅是對(duì)象,還有在構(gòu)造器上,還能用在屬性的方法上。與之相反,的限定符能夠在所有可選的上進(jìn)行縮小范圍的操作,最終能夠達(dá)到只有一個(gè)滿足所規(guī)定的限制條件。注解是使用限定符的主要方式。 本文首發(fā)于泊浮目的專欄:https://segmentfault.com/blog... Spring致力于提供一種方法管理你的業(yè)務(wù)對(duì)象。在大量Java EE的應(yīng)用中,隨處可...

    DTeam 評(píng)論0 收藏0
  • Spring - 裝配Bean

    摘要:裝配任何一個(gè)成功的應(yīng)用都是由多個(gè)為了實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo)而相互協(xié)作的組件構(gòu)成的創(chuàng)建應(yīng)用對(duì)象之間協(xié)作關(guān)系的行為通常稱為裝配,這也是依賴注入配置的可選方案在中進(jìn)行顯示配置在中進(jìn)行顯示配置隱式的發(fā)現(xiàn)機(jī)制和自動(dòng)裝配自動(dòng)化裝配組件掃描會(huì)自動(dòng)發(fā)現(xiàn)應(yīng)用上下文 裝配Bean 任何一個(gè)成功的應(yīng)用都是由多個(gè)為了實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo)而相互協(xié)作的組件構(gòu)成的 創(chuàng)建應(yīng)用對(duì)象之間協(xié)作關(guān)系的行為通常稱為裝配(wiring)...

    CNZPH 評(píng)論0 收藏0
  • 第三章 高級(jí)裝配

    摘要:注解只可以裝配只有一個(gè)實(shí)現(xiàn)類的例如下面的有三個(gè)實(shí)現(xiàn)類,自動(dòng)裝配時(shí),就會(huì)不知道選哪一個(gè),因而會(huì)報(bào)錯(cuò)誤。使用表達(dá)式語言進(jìn)行裝配使用的來引用待補(bǔ)充實(shí)例調(diào)用方法和訪問對(duì)象的屬性對(duì)峙進(jìn)行算數(shù),關(guān)系和邏輯運(yùn)算正則表達(dá)式匹配集合操作 完整代碼請(qǐng)見:https://github.com/codercuixi... 第一部分 @Profile注解的使用 環(huán)境與profile 是否啟用某個(gè)bean,常用于...

    only_do 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Spring入門篇》學(xué)習(xí)總結(jié)

    摘要:入門篇學(xué)習(xí)總結(jié)時(shí)間年月日星期三說明本文部分內(nèi)容均來自慕課網(wǎng)。主要的功能是日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等等。 《Spring入門篇》學(xué)習(xí)總結(jié) 時(shí)間:2017年1月18日星期三說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:https://git...

    Ververica 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<