注解式項(xiàng)目開(kāi)發(fā)!詳細(xì)分析Java中各個(gè)注解的作用和使用方式(java注解使用案例)

      網(wǎng)友投稿 1449 2022-05-30

      @Target

      作用: 指明了修飾的這個(gè)注解的使用范圍, 即被描述的注解可以用在哪里

      @Target(ElementType.Type)

      ElementType取值的類型:

      TYPE: 類,接口或者枚舉

      FIELD: 域,包含枚舉常量

      METHOD: 方法

      PARAMETER: 參數(shù)

      CONSTRUCTOR: 構(gòu)造方法

      LOCAL_VARIABLE: 局部變量

      ANNOTATION_TYPE: 注解類型

      PACKAGE: 包

      @Retention

      作用: 指明修飾的注解的生存周期, 即會(huì)保留到哪個(gè)階段

      RetentionPolicy的取值類型有三種:

      SOURCE: 源碼級(jí)別保留,編譯后即丟棄

      CLASS: 編譯級(jí)別保留,編譯后的class文件中存在,在jvm運(yùn)行時(shí)丟棄,這是默認(rèn)值

      RUNTIME: 運(yùn)行級(jí)別保留,編譯后的class文件中存在,在jvm運(yùn)行時(shí)保留,可以被反射調(diào)用

      @Documented

      作用: 指明修飾的注解,可以被例如javadoc此類的工具文檔化

      只負(fù)責(zé)標(biāo)記

      沒(méi)有成員取值

      @Inherited

      作用: 允許子類繼承父類中的注解

      @Inherited需要和@AliasFor一起使用: 在子注解對(duì)應(yīng)的屬性使用@AliasFor

      注解是可以繼承的,但是注解是不能繼承父注解的屬性

      也就是說(shuō),在類掃描時(shí)的注解的屬性值依然是父注解的屬性值,而不是自定義注解的屬性值

      需要在注解的屬性上使用@AliasFor

      @ComponentScan

      作用: 定義掃描的路徑從中找出標(biāo)識(shí)了需要裝配的類自動(dòng)裝配到spring的bean容器中

      默認(rèn)會(huì)掃描該類所在的包下所有的配置類

      @ComponentScan中的參數(shù)類型:

      value: 用于對(duì)指定包的路徑進(jìn)行掃描

      basePackages: 用于指定包的路徑進(jìn)行掃描,用法和value一樣.建議使用value

      basePackageClasses: 用于對(duì)指定某個(gè)類的所在的包的路徑進(jìn)行掃描

      nameGenerator: 用于為Spring容器中的檢測(cè)到bean組件命名

      useDefaultFilters: 是否開(kāi)啟對(duì) @Component,@Repository,@Service,@Controller的類進(jìn)行檢測(cè)

      excludeFilters: 按照過(guò)濾條件進(jìn)行排除

      FilterType.ANNOTATION: 按照注解

      FilterType.ASSIGNABLE_TYPE: 按照給定的類型

      FilterType.ASPECTJ: 使用ASPECTJ表達(dá)式

      FilterType.REGEX: 使用正則表達(dá)式

      FilterType.CUSTOM: 按照自定義規(guī)則

      includeFilters: 按照過(guò)濾條件進(jìn)行包含

      FilterType.ANNOTATION: 按照注解

      FilterType.ASSIGNABLE_TYPE: 按照給定的類型

      FilterType.ASPECTJ: 使用ASPECTJ表達(dá)式

      FilterType.REGEX: 使用正則表達(dá)式

      FilterType.CUSTOM: 按照自定義規(guī)則

      @Filter

      作用: 配置過(guò)濾條件的過(guò)濾器注解

      @Filter中的參數(shù)類型:

      type

      class

      @interface

      作用: 自定義注解

      自動(dòng)繼承java.lang.annotation.Annotation接口,由編譯程序自動(dòng)完成其他細(xì)節(jié)

      在定義注解時(shí),不能繼承其他的注解或接口

      @interface用來(lái)聲明一個(gè)注解:

      其中的每一個(gè)方法實(shí)際上是聲明一個(gè)配置參數(shù)

      方法的名稱就是參數(shù)的名稱

      方法的返回值類型就是參數(shù)的類型

      返回值類型只能是基本類型,Class,String,enum

      可以通過(guò)default來(lái)聲明參數(shù)的默認(rèn)值

      定義注解的格式:

      public @interface 注解名 {定義體}

      注解參數(shù)支持的數(shù)據(jù)類型:

      基本數(shù)據(jù)類型: int,float,boolean,byte,double,char,long,short

      String類型

      Class類型

      注解式項(xiàng)目開(kāi)發(fā)!詳細(xì)分析Java中各個(gè)注解的作用和使用方式(java注解使用案例)

      enum類型

      Annotation類型

      以上類型組合的數(shù)組

      Annotation類型中參數(shù)設(shè)定規(guī)則:

      只能用public或default默認(rèn)訪問(wèn)權(quán)修飾:

      參數(shù)成員只能用基本類型byte,short,char,int,long,float,double,boolean八種基本數(shù)據(jù)類型和String,Enum,Class,annotations等數(shù)據(jù)類型,以及這一些類型的數(shù)組

      如果只有一個(gè)參數(shù)成員,最好把參數(shù)名稱設(shè)為value,后加小括號(hào)

      注解元素的默認(rèn)值:

      注解元素必須有確定的值

      要么在定義注解的默認(rèn)值中指定,要么在使用注解時(shí)指定,非基本類型的注解元素的值不可為null

      因此使用空字符串或0作為默認(rèn)值約束

      這個(gè)約束使得處理器很難表現(xiàn)一個(gè)元素的存在或缺失的狀態(tài):

      因?yàn)槊總€(gè)注解的聲明中,所有元素都存在,并且都具有相應(yīng)的值

      為了繞開(kāi)這個(gè)約束,只能定義一些特殊的值(比如空字符串或者負(fù)數(shù)),表示某個(gè)元素不存在

      @AliasFor

      作用: 為注解的屬性添加別名

      在同一個(gè)注解內(nèi),對(duì)兩個(gè)不同的屬性一起使用,互為別名:

      無(wú)論為哪個(gè)屬性名設(shè)置屬性值,另一個(gè)屬性名也是同樣的屬性值

      互為別名的屬性值必須相同,否則會(huì)報(bào)錯(cuò)

      屬性必須要有默認(rèn)的屬性值

      public @interface RequestMapping { @AliasFor("path") // 此時(shí)path和value值必須是一樣的,否則會(huì)報(bào)錯(cuò) String[] value() default {}; @AliasFor("value") // 此時(shí)path和value值必須是一樣的,否則會(huì)報(bào)錯(cuò) String[] path() default {}; }

      顯式的覆蓋元注解中的屬性:

      顯式的為元注解的屬性設(shè)置別名

      屬性類型,屬性默認(rèn)值必須相同

      @AliasFor只能為作為當(dāng)前注解的元注解起別名

      示例:

      @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = AopConfig.class) public class AopUtilsTest {}

      要想替換 @ContextConfiguration(classes = AopConfig.class) 注解,可以這樣定義一個(gè)標(biāo)簽:

      @Retention(RetentionPolicy.RUNTIME) @ContextConfiguration public @interface Context { @AliasFor(value = "classes", annotation = ContextConfiguration.class) Class[] cs() default {}; }

      因?yàn)?@ContextConfiguration注解本身被定義為 @Inherited的,所以Context注解即可理解為繼承 @ContextConfiguration注解

      cs屬性等同于 @ContextConfiguration屬性中的classes屬性.使用了 @AliasFor標(biāo)簽,分別設(shè)置:

      value: 作為哪個(gè)屬性的別名

      annotation: 作為哪個(gè)注解的別名

      使用Context標(biāo)簽的可以達(dá)到同樣效果:

      @RunWith(SpringJUnit4ClassRunner.class) @STC(cs = AopConfig.class) public class AopUtilsTest {}

      在一個(gè)注解中隱式聲明別名:

      @ContextConfiguration public @interface MyTestConfig { @AliasFor(annotation = ContextConfiguration.class, attribute = "locations") String[] value() default {}; @AliasFor(annotation = ContextConfiguration.class, attribute = "locations") String[] groovyScripts() default {}; @AliasFor(annotation = ContextConfiguration.class, attribute = "locations") String[] xmlFiles() default {}; }

      這就是在統(tǒng)一注解中隱式聲明別名:

      在MyTestConfig注解中 ,value,groovyScripts,xmlFiles都定義為@AliasFor(annotation = ContextConfiguration.class, attribute = “l(fā)ocations”)的別名

      在這個(gè)注解中 ,value,groovyScripts和xmlFiles也互為別名

      別名的傳遞:

      @AliasFor注解是允許別名之間的傳遞的:

      如果A是B的別名,并且B是C的別名,那么A是C的別名

      @MyTestConfig public @interface GroovyOrXmlTestConfig { @AliasFor(annotation = MyTestConfig.class, attribute = "groovyScripts") String[] groovy() default {}; @AliasFor(annotation = ContextConfiguration.class, attribute = "locations") String[] xml() default {}; }

      GroovyOrXmlTestConfig把 @MyTestConfig作為元注解

      定義了groovy屬性,并作為MyTestConfig中的groovyScripts屬性的別名

      定義了xml屬性,并作為ContextConfiguration中的locations屬性的別名

      因?yàn)镸yTestConfig中的groovyScripts屬性本身就是ContextConfiguration中的locations屬性的別名,所以xml屬性和groovy屬性也互為別名

      @Alias中的屬性:

      annotation: 類類型,別名屬性的類的類型,即別名的屬性屬于哪個(gè)注解類

      attribute: 需要?jiǎng)e名的屬性

      value: 屬性的別名

      @Import

      @Import支持導(dǎo)入普通的Java類,并聲明為一個(gè)Bean

      @Import使用場(chǎng)景:

      @Import主要用在基于Java代碼顯式創(chuàng)建bean的過(guò)程中

      @Import用于將多個(gè)分散的Java Config配置類融合成一個(gè)完整的config類

      配置類的組合主要發(fā)生在跨模塊或者跨包的配置類引用過(guò)程中: 將多個(gè)按功能或者按業(yè)務(wù)劃分的配置文件導(dǎo)入到單個(gè)配置文件中,避免將所有配置寫在一個(gè)配置中

      @Import與@ImportResource注解的作用類似

      使用@ImportResource和@Value可以進(jìn)行資源文件的讀取

      SpringBoot

      @SpringBootApplication

      包含:

      @Configuration

      @EnableAutoConfiguration

      @ComponentScan

      通常用在主類上

      @ConfigurationProperties

      可以使用 @ConfigurationProperties獲取大量配置在application.properties和application.yml中參數(shù)的參數(shù)值

      @ConfigurationProperties的使用: 要為每個(gè)捕獲的外部屬性提供一個(gè)帶有字段的類

      前綴prefix定義的相關(guān)的外部屬性要綁定到類的字段上

      根據(jù)SpringBoot寬松的綁定規(guī)則,類屬性的名稱必須與外部屬性名稱匹配

      可以將類類型的bean使用@Bean注解的方法注入到另一個(gè)bean中,那么這個(gè)bean可以以類型安全的方式訪問(wèn)外部配置的參數(shù)值

      可以簡(jiǎn)單地用一個(gè)值初始化一個(gè)字段來(lái)定義一個(gè)默認(rèn)值. 最好與配置文件中的值相同

      類本身可以是包私有的

      類的字段必須有公共setter方法

      激活@ConfigurationProperties:

      通過(guò)添加 @Component注解讓ComponentScan掃描到

      只有當(dāng)該類所在的包被Spring的@ComponentScan掃描到才會(huì)生效.默認(rèn)情況下,該注解會(huì)掃描在主應(yīng)用類下所有包結(jié)構(gòu)

      @Component @ConfigurationProperties(prefix = "spring.logger") class LogProperties { ... }

      通過(guò)Spring的Java Configuration特性激活@ConfigurationProperties

      只要MailModuleConfiguration類被SpringBoot應(yīng)用掃描到,就可以在應(yīng)用上下文中訪問(wèn)MailModuleProperties bean

      @Configuration class PropertiesConfig { @Bean public LogModuleProperties logModuleProperties() { return new logModuleProperties(); } }

      同時(shí)可以使用 @EnableConfigurationProperties注解使得SpringBoot找到這個(gè)類. 這個(gè)注解用了 @Import(EnableConfigurationPropertiesImportSelector.class) 實(shí)現(xiàn)

      @Configuration @EnableConfigurationProperties(LogModuleProperties.class) class PropertiesConfig { }

      激活一個(gè) @ConfigurationProperties類時(shí)最好模塊化應(yīng)用程序,并讓每個(gè)模塊提供自己的 @ConfigurationProperties類,只提供模塊需要的屬性.這樣可以使得在不影響其他模塊的情況下重構(gòu)一個(gè)模塊中的屬性變得更加方便.因此不建議在程序類本身上使用 @EnableConfigurationProperties, 應(yīng)該在特定模塊的 @Configuration類上使用 @EnableConfigurationProperties, 該類也可以利用包私有的可見(jiàn)性對(duì)特定應(yīng)用程序其余部分隱藏屬性

      @ConfigurationProerties中無(wú)法轉(zhuǎn)換的屬性:

      當(dāng)為 @ConfigurationProperties中的屬性配置錯(cuò)誤的值時(shí),又不希望SpringBoot應(yīng)用啟動(dòng)失敗.可以設(shè)置ignoreInvalidFields注解屬性為true, 默認(rèn)為false

      @ConfigurationProperties(prefix = "spring.logger", ignoreInvalidFields = true) public class LogModuleProperties { private Boolean enabled = Boolean.True; }

      SpringBoot將會(huì)設(shè)置enable字段為設(shè)定好的默認(rèn)值. 如果沒(méi)有設(shè)定默認(rèn)值 ,enabled的值將為null, 因?yàn)檫@里定義的是boolean的包裝類Boolean

      @ConfigurationProperties中未知的屬性:

      默認(rèn)情況下,SpringBoot會(huì)忽略不能綁定到 @ConfigurationProperties類字段的屬性

      當(dāng)配置文件中又一個(gè)屬性實(shí)際沒(méi)有綁定到 @ConfigurationProperties類時(shí),希望SpringBoot啟動(dòng)失敗

      或者是以前使用過(guò)這個(gè)屬性,但已經(jīng)被刪除了,希望被觸發(fā)告知手動(dòng)從application.properties刪除這個(gè)屬性

      這是需要設(shè)置ignoreUnknownFields注解屬性為false, 默認(rèn)為true

      @ConfigurationProperties(prefix = "spring.logger", ignoreUnknownFields = false) class LogModuleProperties { private Boolean enabled = Boolean.TRUE; private String defaultSubject; }

      對(duì)于ignoreUnkownFields, 在SpringBoot中可能有兩個(gè)帶有@ConfigurationProperties的類,同時(shí)綁定到了同一個(gè)命名空間 (namespace) 上,其中一個(gè)類可能知道某個(gè)屬性,另一個(gè)類卻不知道某個(gè)屬性,這樣會(huì)導(dǎo)致啟動(dòng)失敗.所以這個(gè)屬性不再使用

      啟動(dòng)時(shí)校驗(yàn)@ConfigurationProperties:

      如果希望配置參數(shù)在傳入到應(yīng)用中是有效的,可以通過(guò)在字段上添加bean validation注解,同時(shí)在類上添加 @Validated注解

      @ConfigurationProperties(prefix = "spring.logger") @Validated @Data class LogModuleProperties { @NotNull private Boolean enabled; @NotEmty private String defaultSubject; }

      如果這些默認(rèn)的驗(yàn)證注解不能滿足驗(yàn)證要求的,可以自定義注解. 如果驗(yàn)證邏輯很特殊,可以實(shí)現(xiàn)一個(gè)方法,并用 @PostConstruct標(biāo)記,如果驗(yàn)證失敗,方法拋出異常即可

      復(fù)雜屬性類型:

      多數(shù)情況下,傳遞給應(yīng)用的參數(shù)是基本字符串或者數(shù)字,有時(shí)又需要傳遞比如List的數(shù)據(jù)類型

      List和Set:

      有兩種方式讓SpringBoot自動(dòng)填充List屬性:

      在application.properties文件中以數(shù)組形式書寫

      spring.logger.smtpServers[0]=server1 spring.logger.smtpServers[1]=server1

      application.yml本身支持List類型,可以在application.yml文件中添加

      spring: mail: smtpServers: - server1 - server2

      set集合也是使用同樣的配置方式

      推薦使用YML做數(shù)據(jù)配置,能夠更好的閱讀,層次分明

      Duration:

      SpringBoot內(nèi)置支持從配置參數(shù)中解析duration(持續(xù)時(shí)間):

      @Data @ConfigurationProperties(prefix = "spring.logger") class loggerModuleProperties { private Duration pauseBetweenLogs; }

      既可以配置毫秒數(shù)值,也可以配置帶有單位的文本:

      spring.logger.pause-between-logs=5s

      如果配置duration沒(méi)有寫單位,默認(rèn)按照毫秒來(lái)指定,也可以通過(guò) @DurationUnit來(lái)指定單位:

      @Data @ConfigurationProperties(prefix = "spring.logger") class loggerModuleProperties { @DurationUnit(ChronoUnit.SECONDS) private Duration pauseBetweenLogs; }

      常用單位如下:

      ns: NANOSECONDS - 納秒

      us: MICROSECONDS - 微秒

      ms: MILLISECONDS - 毫秒

      s: SECONDS - 秒

      m: MINUTES - 分

      h: HOURS - 時(shí)

      d: DAYS - 天

      DataSize:

      與Duration用法一樣,默認(rèn)單位是byte(字節(jié)) , 可以通過(guò)@DataSizeUnit單位指定

      @Data @ConfigurationProperties(prefix = "spring.logger") class loggerMailModuleProperties { @DataSizeUnit(DataUnit.MEGABYTES) private DataSize maxAttachmentSize = DataSize.ofMegebytes(2); }

      添加配置:

      spring.logger.max-attachment-size=1MB

      常見(jiàn)單位如下:

      B: BYTES

      KB: KILOBYTES

      MB: MEGEBYTES

      GB: GIGABYTES

      TB: TERABYTES

      自定義類型:

      有時(shí)候,想解析配置參數(shù)到自定義的對(duì)象類型上,比如自定義物品重量:

      spring.logger.max-attachment-weight=5kg

      在MailModuleProeprties中添加Weight屬性:

      @Data @ConfigurationProperties(prefix = "spring.logger") class MailModuleProperties { private Weight maxAttachmentWeight; }

      創(chuàng)建自定義轉(zhuǎn)換器converter:

      class WeightConverter implements Convert { @Override public Weight convert(String source) { // 根據(jù)String類型的source創(chuàng)建并返回一個(gè)Weight類型的對(duì)象 } }

      將自定義轉(zhuǎn)換器converter注冊(cè)到SpringBoot上下文中

      @Configuration class PropertiesConfig { @Bean @ConfigurationPropertiesBinding public WeightConverter weightConverter() { return new WeightConverter(); } }

      標(biāo)記配置屬性為Deprecated:

      @DeprecatedConfigurationProperty(reason = "change name", replacement = "none") public String getDefaultSubject() { return defaultSubject; }

      可以通過(guò)添加 @DeprecatedConfigurationProperty注解到字段的getter方法上,來(lái)標(biāo)示該字段為deprecated

      SpringBoot的 @ConfigurationProperties注解在綁定類型安全的Java Bean時(shí)是非常強(qiáng)大的

      可以配合其注解屬性和 @DeprecatedConfigurationProperty注解讓配置更加模塊化

      如果使用SpEL表達(dá)式,只能選擇 @Value注解

      @Repository

      用于標(biāo)注數(shù)據(jù)訪問(wèn)組件,即DAO組件

      @Service

      用于標(biāo)注業(yè)務(wù)層組件

      @RestController

      用于標(biāo)注控制層組件

      包含:

      @Controller

      @ResponseBody

      @Controller

      用于標(biāo)注控制層組件

      需要返回頁(yè)面時(shí)要使用 @Controller而不是 @RestController

      @ControllerAdvice

      用于定義 @ExceptionHandler, @InitBinder, @ModelAttribute, 并且應(yīng)用到所有 @RequestMapping中

      @InitBinder: 在執(zhí)行之前初始化數(shù)據(jù)綁定器

      @ModelAttribute: 把值綁定到Model中,可以獲取到該值

      @ExceptionHandler: 全局異常捕捉處理

      @Component

      泛指組件

      當(dāng)組件無(wú)法歸類時(shí),可以使用這個(gè)注解進(jìn)行標(biāo)注

      @ResponseBody

      表示該方法的返回結(jié)果直接被寫入http response body中

      一般在異步獲取數(shù)據(jù)時(shí)使用

      在使用 @RequestMapping后,返回值通常解析為跳轉(zhuǎn)路徑

      比如:

      加上 @ResponseBody后返回結(jié)果不會(huì)被解析為跳轉(zhuǎn)路徑,而是直接寫入HTTP Response Body中

      異步獲取json數(shù)據(jù),加上 @ResponseBody后,會(huì)直接返回json數(shù)據(jù)

      @RequestBody

      參數(shù)前加上這個(gè)注解,表示該參數(shù)必填

      表示接收json字符串轉(zhuǎn)為對(duì)象List

      @ComponentScan

      組件掃描

      掃描到有 @Component, @Cotroller, @Service等這些注解的類,就會(huì)把這些類注冊(cè)為bean*

      @Configuration

      表示該類是Bean的信息源

      相當(dāng)于XML中的,一般標(biāo)注在主類上

      @ConditionOnProperty

      控制Configuration在條件成立時(shí)生效

      屬性:

      value: 數(shù)組,獲取對(duì)應(yīng)property的名稱,與name不可以同時(shí)使用

      prefix: property名稱的前綴,可有可無(wú)

      name: 數(shù)組 ,property完整名稱或者部分名稱(與prefix組合使用,組成完整的property名稱),不可以與value同時(shí)使用

      havingValue: 可與name組合使用,比較獲取到的屬性值與havingValue給定的值是否相同,相同才加載配置

      matchMissing: 缺少該property時(shí)是否可以加載. 如果為true, 沒(méi)有該property也會(huì)正常加載. 如果為false, 則沒(méi)有該property時(shí)則會(huì)報(bào)錯(cuò),默認(rèn)為false

      relaxedNames: 是否支持松散匹配

      @Bean

      相當(dāng)于XML中的,標(biāo)注在方法上

      表示生成一個(gè)bean, 并交給Spring管理

      @EnableAutoConfiguration

      使SpringBoot根據(jù)應(yīng)用所聲明的依賴來(lái)對(duì)Spring框架進(jìn)行配置

      一般加在主類上

      @Autowired

      byType方式

      使用已經(jīng)配置好的Bean, 完成屬性,方法的組裝

      可以對(duì)類成員,方法以及構(gòu)造函數(shù)進(jìn)行標(biāo)注,完成自動(dòng)裝配的工作

      如果加上 @Autowired(required = false), 當(dāng)找不到bean時(shí)也不會(huì)報(bào)錯(cuò)

      @Qualifier

      當(dāng)有多個(gè)同一類型的Bean時(shí),可以使用 @Qualifier(“name”) 來(lái)指定

      需要和 @Autowired一起使用

      @Resource

      @Resource(name = “name”, type = “type”)

      如果沒(méi)有屬性的話,默認(rèn)為byName, 與 @Autowired功能類似

      @RequestMapping

      @RequestMapping是一個(gè)用來(lái)處理請(qǐng)求地址映射的注解,可以使用在類或者方法上

      用在類上時(shí),表示類中所有響應(yīng)請(qǐng)求的方法都以該地址作為父路徑

      @RequestMapping有六個(gè)屬性:

      params: 指定request中必須包含某些參數(shù)值,才讓該方法處理請(qǐng)求

      headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請(qǐng)求

      value: 指定請(qǐng)求的實(shí)際地址. 指定的地址可以是URI Template模式

      method: 指定請(qǐng)求的method類型 ,GET, POST, PUT,DELETE等

      consumes: 指定處理請(qǐng)求的提交內(nèi)容類型 - Content-Type. 比如: application,json,text,html

      produces: 指定返回的內(nèi)容類型,僅當(dāng)request請(qǐng)求頭中的 (Accept) 類型中包含該指定類型才返回

      @GetMapping

      @GetMapping, @PostMapping是組合注解

      相當(dāng)于 @RequestMapping(value = “/”, method = RequestMethod.Get(Post, Put, Delete))

      @RequestParam

      用在方法的參數(shù)前面

      相當(dāng)于 request.getParameter

      @PathVariable

      路徑變量: RequestMapping(“user/get/mac/{macAddress}”)

      public String getByMacAddress(@PathVariable("macAddress") String macAddress) {}

      參數(shù)與大括號(hào)里的名字相同的話,注解后括號(hào)里的內(nèi)容可以不填

      全局異常處理

      @ControllerAdvice

      包含 @Component

      可以被掃描到

      統(tǒng)一異常處理

      @ExceptionHandler

      @Exceptionhandler(Exception.class)

      用在方法上面,表示遇到這個(gè)異常就執(zhí)行這個(gè)方法

      SpringCloud

      @EnableEurekaServer

      用在SpringBoot啟動(dòng)類上

      表示這是一個(gè)Eureka服務(wù)注冊(cè)中心

      @EnableDiscoveryClient

      用在SpringBoot啟動(dòng)類上

      表示這是一個(gè)服務(wù),可以被注冊(cè)中心找到

      @LoadBalanced

      開(kāi)啟負(fù)載均衡能力

      @EnableCircuitBreaker

      用在SpringBoot啟動(dòng)類上

      開(kāi)啟斷路器功能

      HystrixCommand

      @HystrixCommand(fallbackMethod = “backMethod”)

      用在方法上,表示fallbackMethod指定斷路回調(diào)方法

      @EnableConfigServer

      用在SpringBoot啟動(dòng)類上

      表示這是一個(gè)配置中心,開(kāi)啟Config Server

      @EnableZuulProxy

      用在SpringBoot啟動(dòng)類上

      表示開(kāi)啟zuul路由

      @SpringCloudApplication

      微服務(wù)注解集合,包含:

      @SpringBootApplication: SpringBoot注解

      @EnableDiscoveryClient: 注冊(cè)服務(wù)中心Eureka注解

      @EnableCircuitBreaker: 斷路器注解

      這是每一個(gè)微服務(wù)必須應(yīng)該有的注解

      Java Spring Boot

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:基于小熊派開(kāi)發(fā)板+華為云IoT設(shè)計(jì)的云端綠化管理系統(tǒng)
      下一篇:開(kāi)源軟件安全現(xiàn)狀及其漏洞掃描工具(開(kāi)源的漏洞掃描工具)
      相關(guān)文章
      日本亚洲免费无线码| 亚洲国产精品乱码在线观看97| 亚洲国产中文在线二区三区免| 亚洲AV无码AV男人的天堂| 国产偷国产偷亚洲清高动态图 | 国产亚洲福利精品一区二区| 亚洲男同gay片| 亚洲经典千人经典日产| 亚洲成在人线在线播放无码| 亚洲精品无码mⅴ在线观看| 亚洲人成人伊人成综合网无码| 亚洲国产成人精品无码区花野真一| 亚洲第一区二区快射影院| 亚洲看片无码在线视频| 一本色道久久88—综合亚洲精品| 亚洲一线产区二线产区区| 亚洲精品国产av成拍色拍| 无码亚洲成a人在线观看| 一级毛片直播亚洲| 亚洲一区精品伊人久久伊人| 国产亚洲午夜高清国产拍精品| 亚洲人成人无码网www电影首页| 亚洲男同帅GAY片在线观看| 久久国产精品亚洲综合| 久久丫精品国产亚洲av| 亚洲免费在线观看视频| 伊人久久五月丁香综合中文亚洲 | 亚洲乱码av中文一区二区| 亚洲美国产亚洲AV| 狠狠入ady亚洲精品| 亚洲精品tv久久久久久久久久| 中文字幕亚洲综合久久菠萝蜜 | 亚洲αⅴ无码乱码在线观看性色| 成a人片亚洲日本久久| 亚洲综合色区在线观看| 国产av天堂亚洲国产av天堂 | 日本亚洲高清乱码中文在线观看| 亚洲精品老司机在线观看| 亚洲国产美女精品久久久久∴| 亚洲av日韩av不卡在线观看| 亚洲国产美女福利直播秀一区二区|