精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot自定義自動配置這些知識點,你需要了解

開發 前端
如果使用@ConditionalOnClass或@ConditionalOnMissingClass作為元注釋的一部分來組合自己的組合注釋,則必須使用name,因為在這種情況下引用類不會被處理。

理解自動配置bean

在底層,自動配置是用標準的@Configuration類實現的。附加的@Conditional注釋用于約束何時應用自動配置。通常,自動配置類使用@ConditionalOnClass和@ConditionalOnMissingBean注釋。這確保了自動配置僅在找到相關類且尚未聲明自己的@configuration時適用。

你可以瀏覽spring-boot-autoconfigure的源代碼,以查看Spring提供的@Configuration類(參見META-INF/spring.factories 文件)。

定位候選自動配置

Spring Boot檢查是否存在META-INF/spring.factories文件在你發布的jar中。該文件應該在EnableAutoConfiguration為key下列出你的配置類,如下例所示:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.pack.bus.autoconfigure.BusAutoConfiguration,\
com.pack.bus.autoconfigure.BusWebAutoConfiguration

自動配置只能以這種方式加載。確保它們是在特定的包空間中定義的,并且它們永遠不是組件掃描的目標。此外,自動配置類不應該允許組件掃描來查找其他組件。應該使用特定的@Imports。

如果你的配置需要按特定順序應用,你可以使用@AutoConfigureAfter或@AutoConfigureBefore注釋。例如,如果你提供了特定于web的配置,你的類可能需要應用在WebMvcAutoConfiguration之后。

可以使用@AutoConfigureOrder。該注釋具有與常規@Order注釋相同的語義,但為自動配置類提供了專用的順序。

與標準的@Configuration類一樣,自動配置類的應用順序只影響其bean定義的順序。隨后創建這些bean的順序不受影響,由每個bean的依賴關系和@DependsOn關系決定。

條件注釋

你幾乎總是希望在自動配置類中包含一個或多個@Conditional注解。@ConditionalOnMissingBean注解是一個常見的例子,它允許開發人員在對默認值不滿足時覆蓋自動配置。

Spring Boot包含很多@Conditional注解,你可以在自己的代碼中重用這些注解,方法是注解@Configuration類或單獨的@Bean方法。這些注釋包括:

  • Class Conditions

@ConditionalOnClass和@ConditionalOnMissingClass注解讓@Configuration類根據特定類的存在與否被包含。由于注釋元數據是通過ASM解析的,因此你可以使用value屬性來引用真正的類,即使這個類可能實際上沒有出現在正在運行的應用程序類路徑中。如果想用字符串指定類名,也可以使用name屬性。

這種機制不適用于@Bean方法,因為@Bean方法的返回類型通常是條件的目標:在方法的條件應用之前,JVM將加載類并可能處理方法引用,如果類不存在,則這些引用將失敗。

為了處理這種情況,可以使用一個單獨的@Configuration類來隔離這種情況,如下面的例子所示:

@Configuration(proxyBeanMethods = false)
// Some conditions ...
public class MyAutoConfiguration {
// Auto-configured beans ...
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(SomeService.class)
public static class SomeServiceConfiguration {
@Bean
@ConditionalOnMissingBean
public SomeService someService() {
return new SomeService();
}


}
}

如果使用@ConditionalOnClass或@ConditionalOnMissingClass作為元注釋的一部分來組合自己的組合注釋,則必須使用name,因為在這種情況下引用類不會被處理。

  • Bean Conditions

@ConditionalOnBean和@ConditionalOnMissingBean注解讓一個bean根據特定bean的存在與否被包含進來??梢允褂胿alue屬性按類型指定bean,也可以使用name指定bean。search屬性允許您限制在搜索bean時應該考慮的ApplicationContext層次結構。

當放在@Bean方法上時,目標類型默認為方法的返回類型,如下面的例子所示:

@Configuration(proxyBeanMethods = false)
public class MyAutoConfiguration {


@Bean
@ConditionalOnMissingBean
public SomeService someService() {
return new SomeService();
}
}

  • Property Conditions

@ConditionalOnProperty注解讓配置基于Spring環境屬性包含。使用prefix和name屬性指定要檢查的屬性。默認情況下,匹配任何存在且不等于false的屬性。你還可以使用havingValue和matchIfMissing屬性來創建更高級的檢查。

  • Resource Conditions

@ConditionalOnResource注解讓配置只在特定資源存在時才包含??梢允褂贸S玫腟pring約定來指定資源,如下面的例子所示。

  • Web Application Conditions

@ConditionalOnWebApplication和@ConditionalOnNotWebApplication注解讓應用程序根據是否是“web應用程序”來包含配置?;趕ervlet的web應用程序是任何使用Spring WebApplicationContext、定義會話范圍或具有ConfigurableWebEnvironment的應用程序。任何使用ReactiveWebApplicationContext或者ConfigurableReactiveWebEnvironment的應用都可以被稱為響應式web應用。

@ConditionalOnWarDeployment注解根據應用程序是否是部署到容器中的傳統WAR應用程序來包含配置。此條件不適用于與嵌入式服務器一起運行的應用程序。

  • SpEL Expression Conditions

@ConditionalOnExpression注解讓配置基于SpEL表達式的結果包含。

創建自己的Starter

  • 命名

你應該確保為你的starter程序提供適當的命名空間。即使你用了不同的Maven groupId,也不要用spring-boot來啟動模塊名。我們可能會在未來為你的自動配置提供官方支持。

根據經驗,你應該在starter之后命名一個組合模塊。例如,假設你正在為“acme”創建一個starter程序,并且你將自動配置模塊命名為acme-spring-boot,而starter程序命名為acme-spring-boot-starter。如果只有一個模塊組合了這兩個模塊,請將其命名為acme-spring-boot-starter。

  • 配置key

如果starter提供了配置key,它們使用唯一的命名空間。不要把key放在Spring Boot使用的命名空間中(比如server、management、Spring等)。

為每個屬性添加javadoc,確保配置項有文檔記錄,如下面的例子所示。

@ConfigurationProperties("acme")
public class AcmeProperties {


/**
* Whether to check the location of acme resources.
*/
private boolean checkLocation = true;
/**
* Timeout for establishing a connection to the acme server.
*/
private Duration loginTimeout = Duration.ofSeconds(3);
}

  • 完整示例

本示例主要功能是實現日志記錄功能

自動配置類

@Configuration
@EnableConfigurationProperties(LogsProperties.class)
@ConditionalOnProperty(prefix = "logs", name = "enabled", havingValue = "true")
@EnableAspectJAutoProxy
public class LogsAutoConfiguration {

private static final Logger logger = LoggerFactory.getLogger(LogsAutoConfiguration.class) ;

@Resource
private LogsProperties logsProperties ;

@Bean
public AspectJExpressionPointcutAdvisor logAdvisor() {
AspectJExpressionPointcutAdvisor advisor = new AspectJExpressionPointcutAdvisor() ;
logger.info("執行表達式:{}", logsProperties.getPointcut()) ;
advisor.setExpression(logsProperties.getPointcut()) ;
advisor.setAdvice(new SystemAroundOperator()) ;
return advisor ;
}
}

自定義注解

@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface SystemLog {

/**
* <p>操作說明</p>
* @return
*/
String value() default "" ;
}

屬性key配置

/**
* 日志功能屬性配置
* @author xg
*/
@ConfigurationProperties(prefix = "logs")
public class LogsProperties {
/**
* 切入點定義<br/>
* 示例:execution(public * com.pack.controller.*.*(..))
*/
private String pointcut ;
/**
* 是否開啟日志功能
*/
private boolean enabled = true ;
}

Advice定義

public class SystemAroundOperator implements MethodInterceptor {


private static final Logger logger = LoggerFactory.getLogger(SystemAroundOperator.class);


@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
// 開始執行時間
long start = System.currentTimeMillis();
Method method = invocation.getMethod() ;
SystemLog annoLog = null ;
if (method.isAnnotationPresent(SystemLog.class)) {
annoLog = method.getAnnotation(SystemLog.class) ;
String value = annoLog.value() ;
try {
Object result = invocation.proceed() ;
// 方法執行時間
Long execTime = System.currentTimeMillis() - start ;
logger.info("{}, 業務執行時間:{} ms", value, execTime) ;
return result ;
} catch (Throwable t) {
Long execTime = System.currentTimeMillis() - start ;
logger.info("{}, 業務執行時間:{} ms,發生異常信息:{}", value, execTime, t.getMessage()) ;
throw t ;
}
}
return invocation.proceed();
}
}

配置META-INF\spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.pack.config.LogsAutoConfiguration

以上就實現自定義starter的流程。

責任編輯:武曉燕 來源: 實戰案例錦集
相關推薦

2022-10-26 07:21:15

網絡視頻開發

2023-12-15 08:07:37

響應式布局官網

2021-04-27 22:27:19

手機安卓蘋果

2019-11-25 21:46:12

數據湖云計算數據倉庫

2010-03-18 13:48:14

Linux新手

2024-02-26 08:19:00

WebSpring容器

2021-05-05 11:32:36

MySQL數據庫索引

2024-01-24 11:59:44

Django自定義字段Python

2025-02-08 10:29:03

2021-07-06 14:56:20

深度學習編程人工智能

2015-08-12 15:12:56

黑客攻擊云安全云服務

2018-01-29 15:23:14

網絡知識點軟件測試

2021-08-13 08:36:15

SpringMVC自定義

2019-09-18 17:35:52

2021-02-03 13:22:53

區塊鏈數據隱私

2011-04-01 11:16:06

hessian

2012-06-26 10:13:55

2012-06-27 09:11:47

2011-04-01 15:28:40

Zabbix配置安裝

2018-06-21 06:56:03

CASB云安全加密
點贊
收藏

51CTO技術棧公眾號

国产视频第一页在线观看| 青青草华人在线视频| av片在线观看| 成人av网址在线观看| 日本三级久久久| 九九精品视频免费| 女同一区二区三区| 欧美日韩一区二区三区视频| 成人短视频在线观看免费| 涩爱av在线播放一区二区| 麻豆精品一区二区av白丝在线| 九九精品视频在线观看| 播金莲一级淫片aaaaaaa| 久久99成人| 一本色道久久综合亚洲精品按摩| 在线视频91| 四虎精品在永久在线观看 | 日韩中文字幕久久| 国产草草浮力影院| 91精品国产一区二区在线观看| 亚洲成人免费av| 在线观看福利一区| 四虎精品成人免费网站| 国产成人精品影视| 国产欧美韩国高清| av中文在线播放| 欧美一区亚洲| 日韩最新在线视频| 97超碰在线免费观看| 国产精品极品国产中出| 在线播放91灌醉迷j高跟美女 | 免费的成人av| 欧美中文字幕第一页| 欧美日韩精品在线观看视频| 色狮一区二区三区四区视频| 精品调教chinesegay| 性生交大片免费看l| 日韩av懂色| 欧美中文字幕一区| 国产精品亚洲αv天堂无码| 黑人另类精品××××性爽| 专区另类欧美日韩| 欧美日韩在线免费观看视频| wwwxxx在线观看| 久久精品夜色噜噜亚洲aⅴ| 美国av一区二区三区| 欧洲成人一区二区三区| 成人午夜视频福利| 国产精品av一区| 亚洲奶汁xxxx哺乳期| 国产精品一区二区在线播放 | 中文字幕第一区综合| 欧美高清视频一区| 免费成人av电影| 久久久美女艺术照精彩视频福利播放| 精品久久精品久久| 亚洲色图21p| 91一区一区三区| 欧美久久电影| 东凛在线观看| 国产精品国产三级国产aⅴ中文 | 精品999成人| 欧美激情网友自拍| 日本一区二区不卡在线| 亚洲理伦在线| 日韩美女毛茸茸| 中文字幕视频一区二区| 蜜臀精品久久久久久蜜臀| 国产精品一区二区女厕厕| 97精品人妻一区二区三区| 久草在线在线精品观看| 5g国产欧美日韩视频| 亚洲免费成人网| 久久久亚洲综合| 伊人久久青草| 女囚岛在线观看| 欧美午夜www高清视频| 热久久精品免费视频| 激情久久99| 日韩欧美亚洲国产精品字幕久久久 | 久久99精品久久久久久久久久久久| 成人激情免费在线| 好吊视频一区二区三区| 久久蜜桃av一区二区天堂| 无遮挡亚洲一区| 曰本三级在线| 欧美日韩亚洲成人| 日本超碰在线观看| 91蝌蚪精品视频| 亚洲欧美国产一区二区三区| www.4hu95.com四虎| 中文字幕成人在线观看| 欧美国产乱视频| 国产精品免费精品一区| 老鸭窝一区二区久久精品| av男人一区| 欧美日韩视频第一区| 国产探花在线观看视频| 免费福利视频一区| 日韩中文字幕久久| 国产尤物在线视频| 国产一二精品视频| 玛丽玛丽电影原版免费观看1977| 国内精品不卡| 色老汉av一区二区三区| 日韩高清在线一区二区| 亚洲精品小区久久久久久| 日韩在线欧美在线国产在线| 欧美三级 欧美一级| 久久婷婷激情| 国产一区二区三区四区五区在线 | 男女裸体影院高潮| 日韩精品一区二区三区| 日韩欧美国产一二三区| 妖精视频在线观看免费 | 久久久精品麻豆| 国产精品2023| 欧美精品在线第一页| 探花国产精品一区二区| 91原创在线视频| 亚洲色图都市激情| 激情久久一区二区| 亚洲人成网站免费播放| 日本亚洲欧美在线| 国产成人综合自拍| 一区二区三区四区在线视频| 一区二区三区四区日本视频| 精品国免费一区二区三区| 天堂а√在线中文在线鲁大师| 国产日韩欧美一区| 国产精品制服诱惑| 亚洲精品国产精品国自产| 欧美一区二区公司| 亚洲精品乱码久久久久| 天天做天天干天天操| 日韩av大片| 国产精品入口尤物| 国产视频网址在线| 色女孩综合影院| 少妇按摩一区二区三区| 日韩香蕉视频| 国产主播一区二区三区四区| 国产天堂在线播放视频| 日韩欧美激情一区| 欧美极品视频在线观看| 国产一区二区免费在线| 国内精品国产三级国产99| www999久久| 久久av资源网站| 午夜老司机福利| 一区二区免费在线| 精品视频无码一区二区三区| 日韩最新在线| 日本在线观看天堂男亚洲| 国产香蕉视频在线看| 欧美又粗又大又爽| 波多野结衣家庭教师在线观看| 日韩va欧美va亚洲va久久| 日韩欧美激情一区二区| 日韩国产大片| 欧美夫妻性视频| 人妻一区二区三区免费| 欧美日韩视频在线| 久久婷婷五月综合| 精品人妻少妇嫩草av无码专区| 蜜臀av性久久久久av蜜臀妖精| 午夜精品一区二区三区四区| 日韩黄色三级| 色综合色综合久久综合频道88| 黄色av一区二区三区| 亚洲成人精品一区二区| 国产大学生视频| 在线亚洲伦理| 欧美日韩免费观看一区| 三级在线看中文字幕完整版| 亚洲深夜福利视频| 一级二级三级视频| 亚洲欧美自拍偷拍| 亚洲免费999| 我不卡神马影院| 91av免费看| 蜜桃av在线播放| 亚洲深夜福利在线| 99国产精品一区二区三区| 亚洲国产日韩精品| 免费a级黄色片| 蜜桃视频在线一区| 久久观看最新视频| 欧美丝袜美腿| 成人美女免费网站视频| 肉体视频在线| 日韩精品中文字幕在线观看| 亚洲男人天堂网址| 亚洲综合色噜噜狠狠| 人妻丰满熟妇av无码久久洗澡| 免费亚洲一区| 糖心vlog在线免费观看| 亚洲三级网页| 亚洲一区二区三区四区视频| japanese色国产在线看视频| 亚洲午夜小视频| 国产chinasex对白videos麻豆| 午夜精品一区二区三区免费视频 | 北条麻妃一区二区三区中文字幕 | 国产xxxx振车| 国产麻豆一区二区三区精品视频| 国产欧美精品日韩精品| 欧美人与动牲性行为| 亚洲欧美精品suv| 亚洲国产av一区二区| 色婷婷av一区| 岛国毛片在线观看| 久久九九久精品国产免费直播| 日韩精品在线播放视频| 香蕉成人久久| 欧美黄网在线观看| 精品国产视频| 国产精品一区二区在线观看 | 男人天堂资源在线| 欧美一区二区网站| 一卡二卡在线视频| 欧美日韩一区二区三区| 国产盗摄x88av| 中文一区二区在线观看| 最近日本中文字幕| 国产九九视频一区二区三区| 日韩视频第二页| 亚洲视频www| 日本一二三区视频在线| 日产精品一区二区| 久久99精品久久久久久秒播放器| 欧美三级一区| 国产美女被下药99| 欧美大片高清| 国产女主播一区| 国产欧美韩日| 日本欧美在线| 国产精品扒开腿做爽爽爽视频| b站大片免费直播| 精品午夜一区二区三区在线观看| 日本在线xxx| 亚洲调教视频在线观看| 不卡中文字幕在线| 久久av免费| 国产日韩精品久久| 91精品国产自产在线丝袜啪 | 高清不卡亚洲| 97精品视频在线| 日本大片在线播放| 欧美激情视频在线| 伊人福利在线| 精品少妇v888av| www久久日com| 欧美黄色片免费观看| av在线免费播放| 欧美成人剧情片在线观看| 久久综合之合合综合久久| 九九精品在线观看| 久久五月精品中文字幕| 欧美激情影音先锋| 激情av在线| 日本精品中文字幕| 亚洲精品一级二级| 国产精品美女主播| 欧美9999| 国产精品久久久一区二区三区| 波多野结衣一区二区三区免费视频| 99高清视频有精品视频| 伦理一区二区三区| 六月婷婷久久| 日韩精品一区二区三区免费观看| 亚洲视频在线二区| 国产一区日韩欧美| 欧美深夜福利视频| 亚洲欧美日韩国产| 最近免费中文字幕中文高清百度| 久久av资源站| 熟女人妻一区二区三区免费看| 国产白丝网站精品污在线入口| 亚洲天堂视频一区| 国产欧美日韩另类视频免费观看| 国产第一页精品| 一区二区三区鲁丝不卡| 永久免费无码av网站在线观看| 色婷婷综合久久久久中文一区二区 | 风流少妇一区二区三区91| 精品国产1区二区| 天天干天天爱天天操| 日韩av在线导航| 久久久久久久久免费视频| 欧美激情精品久久久| 美女91在线看| 91在线高清视频| 日韩av三区| 一本一道久久a久久综合精品| 欧美日本一区二区高清播放视频| 欧美国产激情视频| 激情另类小说区图片区视频区| 精品无码av一区二区三区不卡| proumb性欧美在线观看| 国产极品视频在线观看| 亚洲精品老司机| 久久久久99精品成人片我成大片| 91精品福利在线一区二区三区| 熟妇人妻一区二区三区四区| 这里只有精品在线观看| 日本成人网址| 免费av一区二区| 外国成人直播| 成人av男人的天堂| 国产区精品区| 逼特逼视频在线| 国产精品中文字幕日韩精品| 久久精品99| 91精品国产综合久| 亚洲国产天堂久久综合网| 国产九色在线| 97超级碰碰人国产在线观看| 祥仔av免费一区二区三区四区| 国产中文一区二区| 日韩影院二区| 精品久久久久av| 成人av资源站| 国产三级aaa| 在线免费观看日本欧美| 黄色福利在线观看| 久久天堂av综合合色| 精品美女一区| 美日韩免费视频| 黄色亚洲在线| 久草免费资源站| 亚洲天堂精品在线观看| 国产一级片免费在线观看| 亚洲美女av网站| 九色porny自拍视频在线观看| 亚洲综合色av| 欧美成免费一区二区视频| 日本熟妇人妻中出| 2023国产精品| 日本在线小视频| 日韩成人在线视频观看| 精精国产xxxx视频在线中文版 | 久草视频一区二区| 亚洲人成人99网站| 亚洲综合电影| 六十路精品视频| 视频在线观看一区| 国产jk精品白丝av在线观看 | 国产在线观看免费av| 欧美xfplay| 成人日韩欧美| 亚洲一区二区三区乱码aⅴ| 国产精品久久久久久久妇| 91丨porny丨首页| 国产3级在线观看| 欧美日韩亚洲综合一区二区三区| 黄色在线网站| 久久久免费观看| 岳的好大精品一区二区三区| 欧美 日韩 国产 高清| 久久国产精品无码网站| 国产成人在线网址| 日韩欧美中文一区二区| 污污在线观看| 国产精品久久久久久久久久直播 | 欧美人与物videos| 国产日本亚洲| 国产对白在线播放| 国产精品66部| 国语对白一区二区| 精品国产91久久久久久久妲己 | 自拍偷拍欧美激情| av中文在线观看| 欧美高清视频在线| 亚洲综合小说图片| www.久久91| 亚洲精品欧美综合四区| 天堂a√在线| 国产精品老女人视频| 亚洲精品a级片| v8888av| 欧美日韩激情一区| 日本高清成人vr专区| 亚洲一区二区中文字幕| 亚洲第一毛片| 亚洲最大成人综合网| 欧美一区二区三区精品| 制服丝袜中文字幕在线| 久久资源av| 久久精品国产**网站演员| 四虎884aa成人精品| 亚洲精品国精品久久99热| 少妇精品视频一区二区免费看| 一区在线电影| 久久久欧美精品sm网站| 99久久精品免费看国产交换| 2021国产精品视频| 久久精品国产亚洲夜色av网站 | 色综合影院在线观看| 国产成人精品免费|