精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

天天干天天综合| 久久久久久久有限公司| 天天看天天摸天天操| 日韩视频1区| 亚洲国产成人porn| 日本精品一区二区三区视频 | 91精品国产一区二区三区 | 日本高清一二三区| 美女av一区| 欧美精品丝袜中出| 成年人网站免费视频| 最近高清中文在线字幕在线观看| 国产麻豆成人传媒免费观看| 国产99久久精品一区二区 夜夜躁日日躁 | 一区二区的视频| 国产专区一区| 日韩中文字幕在线视频| av在线网站观看| 日韩中文字幕一区二区高清99| 日韩欧美在线网址| 日本aa在线观看| 永久免费av在线| 91香蕉国产在线观看软件| 成人a级免费视频| 久久国产视频精品| 影音先锋亚洲电影| 久久国产精品偷| 国产精品无码无卡无需播放器| 色88888久久久久久影院| 日韩一级黄色大片| 久久久精品高清| 成人免费av电影| 精品毛片网大全| 国产一级做a爰片久久毛片男| 在线免费看黄| 国产农村妇女精品| 欧美日韩另类丝袜其他| 天天综合网天天综合| 国产91综合网| 91精品国自产在线观看| 国产农村老头老太视频| 免费xxxx性欧美18vr| 国产精彩精品视频| 免费的毛片视频| 美女黄色成人网| 欧美一区二区.| 亚洲第一精品在线观看| 亚洲一区二区三区高清| 韩日欧美一区二区| 国产成人免费观看视频| av成人天堂| 国产91成人在在线播放| 精品成人av一区二区在线播放| 亚洲激情综合| 91精品国产乱码久久久久久蜜臀| 精品无码m3u8在线观看| 一区二区自拍| 2019国产精品自在线拍国产不卡| 日韩欧美中文字幕一区二区| 国产精品国码视频| 91国语精品自产拍在线观看性色| 日产亚洲一区二区三区| 免费看黄裸体一级大秀欧美| 青青草一区二区| 中文字幕日韩国产| 国产麻豆视频一区二区| av噜噜色噜噜久久| 亚洲 国产 欧美 日韩| 久久久综合九色合综国产精品| 欧美一区二区在线视频观看| 超碰免费在线| 日韩美女精品在线| 日韩极品视频在线观看| 九色porny丨首页入口在线| 欧美特黄级在线| 色婷婷成人在线| 视频在线观看免费影院欧美meiju| 精品伦理精品一区| mm131美女视频| 91精品国产自产拍在线观看蜜 | 人偷久久久久久久偷女厕| 69xxxx欧美| 亚洲一区二区三区小说| 欧美三级午夜理伦三级| 成人精品在线| 日韩经典第一页| 少妇愉情理伦三级| 国产精品www.| 国产成人综合久久| 99国产精品一区二区三区| 91在线国内视频| 在线成人av电影| av资源在线看片| 欧美三级午夜理伦三级中视频| 久久久久亚洲av无码麻豆| 天天操综合520| 精品国偷自产在线视频99| 久久精品久久精品久久| 日韩在线一二三区| 俄罗斯精品一区二区| 国产精品毛片一区二区三区四区| 亚洲精品国产成人久久av盗摄| 国产在线青青草| 日韩视频一二区| 在线精品高清中文字幕| 国产成年人免费视频| 蜜臀久久久久久久| 久久国产精品久久| 菠萝蜜视频国产在线播放| 欧美午夜久久久| 日韩久久久久久久久久久| 九九热爱视频精品视频| 欧美精品videosex极品1| 一区二区三区在线免费观看视频 | 天堂蜜桃91精品| 国产高清精品一区| caopo在线| 欧美性感一类影片在线播放| 免费a v网站| 国产精品久久| 91欧美精品成人综合在线观看| 免费一级在线观看播放网址| 亚洲国产精品久久人人爱| 污污的视频免费观看| 欧美日韩性在线观看| 9.1国产丝袜在线观看| 韩国av免费在线| 亚洲欧美日韩国产一区二区三区| 国产成人在线综合| 欧美一站二站| 国产精品久久久久久久久久ktv | 国产精品无码在线播放| 国产三级精品在线| 国产精品第12页| 日韩大片在线免费观看| 久久久久久美女| 亚洲国产综合一区| 国产一区精品| 一区二区三区四区中文字幕| 亚洲码国产岛国毛片在线| 精品中文字幕一区| 啦啦啦中文在线观看日本| 日韩一区二区电影| 欧美视频www| 国产一区二区调教| 麻豆md0077饥渴少妇| 亚洲精品三区| 日韩视频免费观看| 国产精品乱码一区二区| 亚洲欧美日韩电影| 亚洲成人av免费观看| 欧美精品啪啪| 国产精品免费一区二区三区| 超碰97国产精品人人cao| 精品国产乱码久久| 免费观看一区二区三区毛片| xnxx国产精品| 国产91色在线观看| 91精品啪在线观看国产18 | 玖玖玖电影综合影院| 欧美大成色www永久网站婷| 精品久久久久久亚洲综合网站 | 在线观看日本视频| 国产亚洲精品超碰| 中文字幕成人在线视频| 中文字幕乱码亚洲无线精品一区| 5g国产欧美日韩视频| 激情图片在线观看高清国产| 亚洲精品久久久久中文字幕欢迎你| av大片免费在线观看| 久久久久久久久99精品| 污视频网址在线观看| 欧美日韩国产一区精品一区| 国产专区一区二区三区| 成人在线视频免费看| 久热精品视频在线| 亚洲av成人无码久久精品老人| 91久久香蕉国产日韩欧美9色| 国产精品av久久久久久无| 国内精品在线播放| 国产69精品久久久久久久| 国产探花一区二区| 91黄在线观看| 国产不卡网站| 美女视频久久黄| 日本福利午夜视频在线| 欧美日韩国产一二三| 日本少妇毛茸茸高潮| 中文字幕欧美激情一区| 蜜桃色一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 一级一片免费播放| 日韩有码中文字幕在线| 成人h视频在线| 欧美激情网站| 久久中文字幕国产| 免费黄网站在线观看| 欧美一区二区三区啪啪| www五月天com| 亚洲一级电影视频| 亚洲精品国产精品国自| 99精品欧美一区二区三区小说| 亚欧激情乱码久久久久久久久| 亚洲黄色视屏| 国产精品一区在线免费观看| 国产成人av| 国产精品久久久久久久小唯西川| 玖玖精品在线| 日本成人精品在线| h片精品在线观看| 精品国产一区二区三区久久| 黄色免费在线播放| 亚洲大胆美女视频| 国产suv一区二区| 欧美日韩综合不卡| √资源天堂中文在线| 亚洲一区二区三区视频在线| 免费精品在线视频| 国产欧美视频一区二区三区| 国产真实乱人偷精品| 国产精品亚洲第一区在线暖暖韩国| 国产精品乱码久久久久| 午夜在线精品| 欧美成人三级在线视频| 欧美精品日本| 97av中文字幕| 亚洲国产精品久久久久蝴蝶传媒| 亚洲 国产 日韩 综合一区| 久久99影视| 九色91在线视频| 粉嫩一区二区三区四区公司1| 91成人理论电影| 精品国产亚洲日本| 成人激情黄色网| 久久久久伊人| 国产综合久久久久久| 亚洲精品555| 国产精品美女久久久久久免费| 欧美第一视频| 国产精品第一区| 成人在线免费av| 国产在线视频欧美| 亚洲欧美久久精品| 91久久精品国产91性色| 日韩毛片网站| 成人在线中文字幕| 日韩视频一二区| 国产精品久久久久久免费观看| 国产成人av毛片| 精品无人区一区二区三区| 欧洲vs亚洲vs国产| 欧美少妇一区| 久久精品国产99久久| 一区二区三区四区五区视频 | 久久在线视频在线| 日韩精品亚洲人成在线观看| 日日噜噜噜夜夜爽亚洲精品| 黄色成人在线| 久久久久久九九九| 中文在线аv在线| 国产精品视频久久久久| 日韩午夜视频在线| 99热最新在线| 牛牛影视一区二区三区免费看| 美国av一区二区三区 | 青青草国产免费| 99精品国产一区二区青青牛奶| 国产裸体舞一区二区三区| 美女看a上一区| 国内精品国产三级国产aⅴ久| 成人性生交大片免费看中文 | 亚洲国产精品久久久久秋霞影院| 亚州国产精品视频| 在线观看日韩一区| 国产三级三级在线观看| 亚洲第一天堂av| 国产二区视频在线观看| 久久视频国产精品免费视频在线| 国产福利在线免费观看| 人体精品一二三区| 日韩精品三级| 欧美不卡三区| 91成人超碰| 欧美韩国日本在线| 国产一区二区中文字幕| 日韩aaaaa| 成人免费在线播放视频| 国产成人无码一区二区三区在线| 在线观看欧美黄色| 亚洲黄色在线观看视频| 亚洲欧美制服第一页| 性欧美猛交videos| 日韩女优人人人人射在线视频| 9999精品视频| 欧美一进一出视频| 午夜激情一区| 黄色手机在线视频| 9i在线看片成人免费| 免费在线观看黄色小视频| 天天操天天色综合| 国产精品综合在线| 亚洲天堂网在线观看| 久久香蕉一区| 国产免费成人av| 国产传媒欧美日韩成人精品大片| 欧美 国产 精品| 青青草原综合久久大伊人精品优势| 农村末发育av片一区二区| 日本一区二区视频在线| 日韩欧美一区二区一幕| 欧美一区二区美女| 午夜视频在线观看网站| 日韩免费在线播放| 国产精品2023| 国产精品无码免费专区午夜| 免费观看久久久4p| 少妇真人直播免费视频| 亚洲国产精品影院| 精品久久国产视频| 久久精品亚洲94久久精品| 欧美成人app| 欧美日韩一区在线播放| 99伊人成综合| 国产精品扒开腿做爽爽爽a片唱戏| 1区2区3区欧美| 亚洲天堂网在线观看视频| 亚洲热线99精品视频| 91精品论坛| 欧美aaaaa喷水| 亚洲专区一区二区三区| 中国极品少妇videossexhd| 亚洲综合色自拍一区| 国产剧情久久久| 久久综合九色九九| 96视频在线观看欧美| 国产精品h视频| 精品亚洲国内自在自线福利| 波兰性xxxxx极品hd| 欧美日韩国产美| 在线视频三区| 国产综合香蕉五月婷在线| 久久社区一区| 久久久久久久久久久久久久久国产 | 亚洲综合图区| 999国产视频| 欧美特黄视频| 日韩少妇一区二区| 精品久久久中文| 麻豆app在线观看| 国产精品av电影| 欧美激情偷拍自拍| 精品国产午夜福利在线观看| 一区二区三区产品免费精品久久75| 国产高清视频免费观看| 国内精品美女av在线播放| 欧美色图五月天| 18岁视频在线观看| 中文字幕欧美激情| av免费观看在线| 久久久亚洲国产天美传媒修理工| 韩国精品福利一区二区三区| 成年人网站免费视频| 国产无人区一区二区三区| 亚洲专区在线播放| 欧美另类极品videosbest最新版本| 亚洲大奶少妇| 丰满少妇被猛烈进入高清播放| 国产亚洲综合在线| 国产精品毛片一区二区在线看舒淇 | 性欧美精品中出| 欧美日韩精品一区二区天天拍小说| 永久免费av片在线观看全网站| 91亚洲精品丁香在线观看| av成人黄色| 国精品人伦一区二区三区蜜桃| 欧美一区二区女人| 亚洲免费福利| 久久国产精品免费观看| 久久久亚洲精品石原莉奈| 怡春院在线视频| 欧美精品久久久久久久久| 国产a久久精品一区二区三区| 黄色aaaaaa| 岛国精品视频在线播放| 香蕉视频在线播放| 九色91视频| 国产一区二区三区在线观看免费视频| 日本熟妇乱子伦xxxx| 中文字幕欧美日韩在线| 久久影院资源站| 怡红院亚洲色图| 精品人伦一区二区三区蜜桃网站| 992tv免费直播在线观看| 国内一区在线| 精品在线你懂的| 日韩电影在线观看一区二区| 欧美国产高跟鞋裸体秀xxxhd| av亚洲免费| 中国一级特黄录像播放| 51精品秘密在线观看|