国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Spring高級裝配之運行時注入

ZweiZhao / 2824人閱讀

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

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

運行時注入與硬編碼注入是相對的。硬編碼注入在編譯時就已經確定了,運行時注入則可能需要一些外部的參數來解決。

Spring提供的兩種在運行時求值的方式:

屬性占位符(Property placeholder)

Spring表達式語言(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);

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

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

其他相關方法:

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

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

String[] getDefaultProfiles() : 返回默認profile名稱的數組

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;
}

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

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

SpEL主要特性:

使用beanID來引用bean

訪問對象的屬性和方法

可對值進行算數、關系和邏輯運算

正則表達式匹配

集合操作

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

SpEL樣例

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

#{1}

常量,結果始終為1

#{T(System).currentTimeMillis()}

T()表達式會將java.lang.System視為Java中對應的類型,然后調用其方法,獲取當前時間戳。

#{dataSource.user}

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

#{systemProperties["username"]}

通過systemProperties對象獲取系統屬性

表示字面量

可表示的字面量有int,float/double,String,boolean,其中浮點值可以用科學技術法表示:#{6.18E3}

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

如果方法返回值為null,第四種情況會拋出NullPoniterException。可以使用:

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

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

在表達式中使用類型

使用T()表達式來訪問Java類中的static方法和常量,在括號內的是類名,返回一個Class對象,然后調用其方法和常量。

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

Elvis運算符

利用三元運算符來檢查場景:#{disc.title ?: "Rattle and Hum"},當disc.titlenull時,返回"Rattle and Hum"

名稱的來歷據說是因為"?"長得像貓王的頭發。。。

正則表達式

正則表達式利用matches來支持正則匹配。

計算集合

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

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

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

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

使用.^[].$[]進行過濾,得到第一個和最后一個匹配項

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

最后四個表達式有點像lambda表達式

SpEL的表達式可以相互組合使用。

更多Spring學習筆記:https://github.com/kbyyd24/spring.demo.test/issues

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65048.html

相關文章

  • Spring - 高級裝配

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

    binta 評論0 收藏0
  • 看起來很長但還是有用的Spring學習筆記

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

    DTeam 評論0 收藏0
  • Spring - 裝配Bean

    摘要:裝配任何一個成功的應用都是由多個為了實現某個業務目標而相互協作的組件構成的創建應用對象之間協作關系的行為通常稱為裝配,這也是依賴注入配置的可選方案在中進行顯示配置在中進行顯示配置隱式的發現機制和自動裝配自動化裝配組件掃描會自動發現應用上下文 裝配Bean 任何一個成功的應用都是由多個為了實現某個業務目標而相互協作的組件構成的 創建應用對象之間協作關系的行為通常稱為裝配(wiring)...

    CNZPH 評論0 收藏0
  • 第三章 高級裝配

    摘要:注解只可以裝配只有一個實現類的例如下面的有三個實現類,自動裝配時,就會不知道選哪一個,因而會報錯誤。使用表達式語言進行裝配使用的來引用待補充實例調用方法和訪問對象的屬性對峙進行算數,關系和邏輯運算正則表達式匹配集合操作 完整代碼請見:https://github.com/codercuixi... 第一部分 @Profile注解的使用 環境與profile 是否啟用某個bean,常用于...

    only_do 評論0 收藏0
  • 慕課網_《Spring入門篇》學習總結

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

    Ververica 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<