最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring 4.0新功能:@Conditional注解詳細(xì)介紹

 更新時間:2017年09月06日 10:29:06   作者:沈子平  
Spring Boot的強(qiáng)大之處在于使用了Spring 4框架的新特性:@Conditional注釋,此注釋使得只有在特定條件滿足時才啟用一些配置。下面這篇文章主要給大家介紹了關(guān)于Spring4.0中新功能:@Conditional注解的相關(guān)資料,需要的朋友可以參考下。

前言

最近在學(xué)習(xí)spring,抽空會將學(xué)習(xí)的知識總結(jié)下面,本文我們會接觸spring 4的新功能:@Conditional注解。在之前的spring版本中,你處理conditions只有以下兩個方法:

  • 在3.1版本之前,你需要使用spring expression language
  • 在3.1版本發(fā)布時,profiles被引入來處理conditions。

讓我們分別看看以上兩者,在來理解spring 4帶來的@Conditional注解。

Spring Expression Language(SPeL)

SPeL的三元標(biāo)識符(IF-THEN-ELSE)可以在spring配置文件中用來表達(dá)條件語句。

<bean id="flag">
 <constructor-arg value="#{systemProperties['system.propery.flag'] ?: false }" />
</bean>
<bean id="bean">
 <property name="property" value="#{ flag ? 'yes' : 'no' }"/>
</bean>

這個bean的屬性依賴于flag的值,該值是使用外部屬性注入的,這樣bean就具有了動態(tài)的能力。

使用 Profiles

這是在spring 3.1引入的。像下面這樣使用。

<!-- default configuration - will be loaded if no profile is specified -->
<!-- This will only work if it's put at the end of the configuration file -->
<!-- so no bean definitions after that -->
<beans profile="default">
  <import resource="classpath:default.xml" />
</beans>
<!-- some other profile -->
<beans profile="otherProfile">
 <import resource="classpath:other-profile.xml" />
</beans>

使用spring 4的@Conditional注解

現(xiàn)在介紹@Conditional注解。官方文檔的說明是“只有當(dāng)所有指定的條件都滿足是,組件才可以注冊”。主要的用處是在創(chuàng)建bean時增加一系列限制條件。

Conditional接口的聲明如下:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE, ElementType.METHOD)
public @interface Conditional{
 Class <!--?extends Condition-->[] value();
}

所以@Conditional注解使用方法如下

  • 類型級別,可以在@Component 或是 @Configuration類上使用
  • 原型級別,可以用在其他自定義的注解上
  • 方法級別,可以用在@Bean的方法上

如果一個@Configuration類使用了@Conditional,會影響所有@Bean方法和@Import關(guān)聯(lián)類

public interface Condition{
/** Determine if the condition matches.
* @param context the condition context
* @param metadata meta-data of the {@link AnnotationMetadata class} or
* {@link Method method} being checked.
* @return {@code true} if the condition matches and the component can be registered
* or {@code false} to veto registration.
*/
boolean matches(ConditionContext context, AnnotatedTypeMedata metadata);
}

下面是一個例子

public class SystemPropertyCondition implements Condition {
 @Override
 public boolean matches(ConditionContext context, AnnotatedTypeMetadata   metadata) {
  return (System.getProperty("flag") != null);
 }
}

class SystemPropertyAbsentCondition implements Condition {
 @Override
 public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
  return (System.getProperty("flag") == null);
 }
}

這里我們有兩個類:SystemPropertyCondition和SystemPropertyAbsentCondtion. 這兩個類都實現(xiàn)了Condition接口.覆蓋的方法基于屬性flag返回一個布爾值。

現(xiàn)在我們定義兩個類,一個是positive條件,一個是negative條件:

@Bean
@Conditional(SystemPropertyCondition.class)
public SampleService service1() {
 return new SampleServiceImpl1();
}

@Bean
@Conditional(SystemPropertyAbsentCondition.class)
public SampleService service2() {
 return new SampleServiceImpl2();
}

上面提到的profiles已經(jīng)通過conditional原型注解進(jìn)行了修改。

總結(jié)

本文介紹了spring 4的conditianal注解。注意condition注解是不會繼承的。如果一個父類使用了conditional注解,其子類是不會擁有conditions的。如果你動手嘗試以上的例子,會幫助你獲得更好的理解。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 解決引入spring-cloud-starter-openfeign后部分類找不到的問題

    解決引入spring-cloud-starter-openfeign后部分類找不到的問題

    這篇文章主要介紹了解決引入spring-cloud-starter-openfeign后部分類找不到的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java詳細(xì)分析講解泛型

    Java詳細(xì)分析講解泛型

    在正式進(jìn)入內(nèi)容之前說明一下:泛型的內(nèi)容太多,也太復(fù)雜。這里因為Java中寫數(shù)據(jù)結(jié)構(gòu)的時候會使用到,所以加上。關(guān)于泛型我找了挺多文章,再結(jié)合自己的理解,盡可能將其講清楚。不求會使用泛型,只要求后面數(shù)據(jù)結(jié)構(gòu)出現(xiàn)泛型的時候能夠知道是在干什么即可
    2022-05-05
  • Java異常處理機(jī)制try catch流程詳解

    Java異常處理機(jī)制try catch流程詳解

    這篇文章主要介紹了Java異常處理機(jī)制try catch流程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Mybatis-Plus?動態(tài)表名的實踐

    Mybatis-Plus?動態(tài)表名的實踐

    本文主要介紹了Mybatis-Plus?動態(tài)表名的實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • java7鉆石語法知識點總結(jié)

    java7鉆石語法知識點總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于java7鉆石語法的相關(guān)知識點內(nèi)容,有需要的朋友們參考下。
    2019-11-11
  • 修改idea運(yùn)行內(nèi)存大小的方法總結(jié)

    修改idea運(yùn)行內(nèi)存大小的方法總結(jié)

    在開發(fā)過程中,總會遇到idea運(yùn)行內(nèi)存不足,所以本文小編給大家介紹了修改idea運(yùn)行內(nèi)存大小的兩種方法,文中通過圖文給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Java 中DateUtils日期工具類的實例詳解

    Java 中DateUtils日期工具類的實例詳解

    這篇文章主要介紹了Java 中DateUtils日期工具類的實例詳解的相關(guān)資料,有時候開發(fā)java項目使用日期類型,這里介紹下日期工具類,需要的朋友可以參考下
    2017-08-08
  • java實現(xiàn)仿windows 字體設(shè)置選項卡實例

    java實現(xiàn)仿windows 字體設(shè)置選項卡實例

    本篇文章介紹了java仿windows 字體設(shè)置選項卡,可實現(xiàn)類似windows字體設(shè)置效果,需要的朋友可以參考下。
    2016-10-10
  • Java線程間共享與協(xié)作詳細(xì)介紹

    Java線程間共享與協(xié)作詳細(xì)介紹

    這篇文章主要介紹了Java線程間共享與協(xié)作詳細(xì)介紹,Java?支持多個線程同時訪問一個對象或者對象的成員變量,更多相關(guān)介紹需要的朋友可以參考一下
    2022-09-09
  • springsecurity 企業(yè)微信登入的實現(xiàn)示例

    springsecurity 企業(yè)微信登入的實現(xiàn)示例

    本文主要介紹了springsecurity 企業(yè)微信登入的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評論

瓦房店市| 江川县| 稷山县| 随州市| 兴仁县| 丘北县| 九龙坡区| 巨野县| 札达县| 安仁县| 眉山市| 宿州市| 乌鲁木齐市| 新绛县| 定结县| 安顺市| 平湖市| 南投市| 曲麻莱县| 金昌市| 岑溪市| 武鸣县| 广昌县| 岳池县| 黔南| 荔波县| 呼伦贝尔市| 天全县| 策勒县| 高唐县| 青海省| 河东区| 松江区| 金门县| 阳新县| 武陟县| 新宾| 怀远县| 济宁市| 河南省| 祁门县|