SpringBoot框架(3)--條件裝配-創(chuàng)新互聯(lián)

場景:需要根據(jù)系統(tǒng)的編碼格式有選擇裝配類。

目前累計服務(wù)客戶上1000+,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗。以網(wǎng)站設(shè)計水平和技術(shù)實力,樹立企業(yè)形象,為客戶提供成都做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補等服務(wù)。成都創(chuàng)新互聯(lián)始終以務(wù)實、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領(lǐng)先技術(shù)的掌握、對創(chuàng)意設(shè)計的研究、對客戶形象的視覺傳遞、對應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。

分析:最直接的實現(xiàn)方式,定義各種編碼格式對應(yīng)的處理類,可以通過System.getProperty("file.encoding")獲得項目的編碼格式,從而通過條件語句if...else..等方式做相應(yīng)的業(yè)務(wù)處理,然后實際中一個項目往往只用到一種編碼格式,如果把所有的編碼處理類都裝配到spring容器中,那么造成了浪費資源。有沒有一種更好的方式可以根據(jù)需要只裝配對象。

  答案肯定是有的,SpringBoot框架為我們提供了@Conditional注解

原理:@Conditional實現(xiàn)的原理就是該注解的值就是一個繼承了Condition的類的集合,而Condition中有個matches方法。當(dāng)該方法返回

 ·true:對象被裝配

 ·false:對象不被裝配

1 @FunctionalInterface
2 public interface Condition {
3     boolean matches(ConditionContext var1, AnnotatedTypeMetadata var2);
4 }
Condition源代碼

demo代碼

(1)代碼結(jié)構(gòu)

(2)GBKCondition.java類實現(xiàn)Condition的matches方法

 1 package com.demo.boot.bootconditionconfig.condition;
 2 
 3 import org.springframework.context.annotation.Condition;
 4 import org.springframework.context.annotation.ConditionContext;
 5 import org.springframework.core.type.AnnotatedTypeMetadata;
 6 
 7 public class GBKCondition implements Condition {
 8     @Override
 9   public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
10         String encoding = System.getProperty("file.encoding");
11 return "gbk".equals(encoding.toLowerCase());
12     }
13 }
GBKCondition.java

(3)UTF8Condition.java類實現(xiàn)Condition的matches方法

 1 package com.demo.boot.bootconditionconfig.condition;
 2 
 3 import org.springframework.context.annotation.Condition;
 4 import org.springframework.context.annotation.ConditionContext;
 5 import org.springframework.core.type.AnnotatedTypeMetadata;
 6 
 7 public class UTF8Condition implements Condition {
 8     @Override
 9   public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
10         String encoding = System.getProperty("file.encoding");
11 return "utf-8".equals(encoding.toLowerCase());
12     }
13 }
UTF8Condition.java

(4)EncodingConverterConfig.java配置類,將GBKCondition類和UTF8Condition類交給SpringBoot容器管理

 1 package com.demo.boot.bootconditionconfig.config;
 2 
 3 import com.demo.boot.bootconditionconfig.condition.GBKCondition;
 4 import com.demo.boot.bootconditionconfig.condition.UTF8Condition;
 5 import com.demo.boot.bootconditionconfig.converter.EncodingConverter;
 6 import com.demo.boot.bootconditionconfig.converter.GBKEncodingConverter;
 7 import com.demo.boot.bootconditionconfig.converter.UTF8EncodingConverter;
 8 import org.springframework.boot.SpringBootConfiguration;
 9 import org.springframework.context.annotation.Bean;
10 import org.springframework.context.annotation.Conditional;
11 
12 @SpringBootConfiguration
13 //@Conditional({UTF8Condition.class,GBKCondition.class})//@Conditional同時也可以注解類,返回true時,類的注解方法都被裝配,多個condition之間是“與”邏輯14 public class EncodingConverterConfig {
15     @Bean
16     @Conditional(UTF8Condition.class)
17   public EncodingConverter createUTF8EncodingConverter() {
18 return new UTF8EncodingConverter();
19     }
20 
21     @Bean
22     @Conditional(GBKCondition.class)
23   public EncodingConverter createGBKEncodingConverter() {
24 return new GBKEncodingConverter();
25     }
26 }
EncodingConverterConfig.java

(5)應(yīng)用程序入口

 1 package com.demo.boot.bootconditionconfig;
 2 
 3 import com.demo.boot.bootconditionconfig.converter.EncodingConverter;
 4 import org.springframework.boot.SpringApplication;
 5 import org.springframework.boot.autoconfigure.SpringBootApplication;
 6 import org.springframework.context.ConfigurableApplicationContext;
 7 
 8 import java.util.Map;
 9 
10 @SpringBootApplication
11 public class BootConditionConfigApplication {
12 
13   public static void main(String[] args) {
14         ConfigurableApplicationContext context = SpringApplication.run(BootConditionConfigApplication.class, args);
15 
16         Map<String, EncodingConverter> beansOfType = context.getBeansOfType(EncodingConverter.class);
17         System.out.println(beansOfType);
18 //獲取系統(tǒng)編碼格式變量19         System.out.println(System.getProperty("file.encoding"));
20 
21         context.close();
22     }
23 
24 }
BootConditionConfigApplication.java

(6)打印結(jié)果

{createUTF8EncodingConverter=com.demo.boot.bootconditionconfig.converter.UTF8EncodingConverter@3e2fc448}
UTF-8

至此,實現(xiàn)了根據(jù)項目編碼格式,有選擇裝配需要對象實例

如果該文章對你有所幫助,請點個贊支持下,謝謝!

新聞名稱:SpringBoot框架(3)--條件裝配-創(chuàng)新互聯(lián)
文章路徑:http://muchs.cn/article16/djiegg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、外貿(mào)建站網(wǎng)站維護(hù)、服務(wù)器托管軟件開發(fā)、移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司