日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring系列(六):@Conditional注解用法介绍

發布時間:2023/12/10 javascript 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring系列(六):@Conditional注解用法介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天給大家介紹@Conditional懶加載注解用法,希望對大家能有所幫助!

? ? ? ? ? ? ? ?

1、@Conditional注解介紹

@Conditional是Spring4版本新提供的一種注解,它的作用是按照設定的條件進行判斷,把滿足判斷條件的bean注冊到Spring容器。

2、@Conditional的源碼內容如下:

@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Conditional {/*** All {@link Condition Conditions} that must {@linkplain Condition#matches match}* in order for the component to be registered.*/Class<? extends Condition>[] value(); }

說明:

  • @Conditional可以作用在方法上,也可以作用在類上。

  • 使用的時候需要傳入實現Condition接口類數組。

  • 如果是類和方法都加了@Conditional注解,最終在方法上的注解為最終的條件,如果返回true則加入容器,反之不會加入容器。

  • 如果只是類上加了@Conditional注解,整個類的所有方法都會加入容器中。

3、用法示例

3.1 新建Book.java 文件

package com.spring.bean;public class Book {private String bookName;private String bookType;private double price;public Book(String bookName, String bookType, double price) {this.bookName = bookName;this.bookType = bookType;this.price = price;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public String getBookType() {return bookType;}public void setBookType(String bookType) {this.bookType = bookType;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Book{" +"bookName='" + bookName + '\'' +", bookType='" + bookType + '\'' +", price=" + price +'}';} }

3.2 CNCondition.java 文件

package com.spring.condition;import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata;public class CNCondition implements Condition {public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {// user.language=CN 表示中文返回 truereturn conditionContext.getEnvironment().getProperty("user.language").contains("cn");} }

3.3 ZHCondition.java 文件

package com.spring.condition;import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata;public class ZHCondition implements Condition {public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {// user.language=ZH Java默認語言 表示中文返回 truereturn conditionContext.getEnvironment().getProperty("user.language").contains("zh");} }

3.4 新建TestConditionalConfig.java 配置文件

package com.spring.config;import com.spring.bean.Book; import com.spring.condition.CNCondition; import com.spring.condition.ZHCondition; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration;@Configuration @Conditional(ZHCondition.class)public class TestConditionalConfig {@Bean@Conditional(ZHCondition.class)//中文public Book bookZH() {return new Book("紅樓夢","中國古典書籍",99.9);}@Bean@Conditional(CNCondition.class)//英文public Book bookCN() {return new Book("哈姆雷特","外國經典名著",66.6);} }

3.5 新建TestConditional.java 測試文件

package com.spring.test;import com.spring.bean.Book; import com.spring.config.TestConditionalConfig; import org.springframework.context.annotation.AnnotationConfigApplicationContext;import java.util.Map;public class TestConditional {public static void main(String[] args) {AnnotationConfigApplicationContext annotationContext = new AnnotationConfigApplicationContext(TestConditionalConfig.class);Map<String, Book> map = annotationContext.getBeansOfType(Book.class);System.out.println(map);} }

4、@Conditional應用場景

在一些需要條件滿足才是實例化的類中,使用此注解,

比如項目中需要根據不同的場景使用不同的消息中間件,在消息隊列的實例化bean上,使用@Conditional注解,根據配置文件的不同,來判斷哪個bean需要加載到Spring容器中。

5、@Conditional的擴展注解

@ConditionalOnBean:僅在當前上下文中存在某個對象時,才會實例化一個Bean。 @ConditionalOnClass:某個class位于類路徑上,才會實例化一個Bean。 @ConditionalOnExpression:當表達式值為true的時候,才會實例化一個Bean。 @ConditionalOnMissingBean:僅僅在當前上下文中不存在某個對象時,才會實例化一個Bean。 @ConditionalOnMissingClass:某個class類路徑上不存在的時候,才會實例化一個Bean。 @ConditionalOnNotWebApplication:非web應用,才會實例化一個Bean。 @ConditionalOnBean:當容器中有指定Bean的條件下進行實例化。 @ConditionalOnMissingBean:當容器里沒有指定Bean的條件下進行實例化。 @ConditionalOnClass:當classpath類路徑下有指定類的條件下進行實例化。 @ConditionalOnMissingClass:當類路徑下沒有指定類的條件下進行實例化。 @ConditionalOnWebApplication:當項目是一個Web項目時進行實例化。 @ConditionalOnNotWebApplication:當項目不是一個Web項目時進行實例化。 @ConditionalOnProperty:當指定的屬性有指定的值時進行實例化。 @ConditionalOnExpression:基于SpEL表達式的條件判斷。 @ConditionalOnJava:當JVM版本為指定的版本范圍時觸發實例化。 @ConditionalOnResource:當類路徑下有指定的資源時觸發實例化。 @ConditionalOnJndi:在JNDI存在的條件下觸發實例化。 @ConditionalOnSingleCandidate:當指定的Bean在容器中只有一個,或者有多個但是指定了首選的Bean時,才會觸發實例化。

IT技術分享社區

個人博客網站:https://programmerblog.xyz

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

總結

以上是生活随笔為你收集整理的Spring系列(六):@Conditional注解用法介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。