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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring Enable批注–编写自定义的Enable批注

發(fā)布時(shí)間:2023/12/3 javascript 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Enable批注–编写自定义的Enable批注 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Spring提供了一系列名稱(chēng)以Enable *開(kāi)頭的注釋,這些注釋本質(zhì)上使某些Spring管理的功能可以被激活。 這樣的注釋的一個(gè)很好的例子是EnableWebMvc ,它引入了在基于Spring的應(yīng)用程序中支持MVC流所需的所有bean。 另一個(gè)很好的例子是EnableAsync注釋,用于在基于Spring的應(yīng)用程序中激活bean以支持異步功能。

我對(duì)這樣的注釋如何工作感到好奇,并希望記錄下我的理解。 支持這些注釋的方式可以視為SPI的一部分,因此,如果將來(lái)內(nèi)部實(shí)現(xiàn)發(fā)生更改,則可能會(huì)中斷。

簡(jiǎn)單的啟用*注釋

考慮這些自定義注釋的一種方法是,它們將一組新bean添加到Spring的應(yīng)用程序上下文中。 讓我們首先定義一個(gè)這樣的自定義注釋:

@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @interface EnableSomeBeans {}

并將此注釋?xiě)?yīng)用于Spring @Configuration類(lèi):

@Configuration @EnableSomeBeans public static class SpringConfig {}

因此,現(xiàn)在在應(yīng)用此批注時(shí)引入一組bean就像添加通過(guò)@Import批注以這種方式引入的bean組一樣簡(jiǎn)單:

@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Import(SomeBeanConfiguration.class) @interface EnableSomeBeans {}

本質(zhì)上就是這樣,如果此導(dǎo)入的@Configuration類(lèi)定義了任何bean,則它們現(xiàn)在將成為Application上下文的一部分:

@Configuration class SomeBeanConfiguration {@Beanpublic String aBean1() {return "aBean1";}@Beanpublic String aBean2() {return "aBean2";} }

這是一個(gè)具有工作樣本的要點(diǎn) 。

使用選擇器啟用*注釋

啟用注釋可能要復(fù)雜得多,它們可以根據(jù)周?chē)纳舷挛膩?lái)激活不同的Bean系列。 這樣的注釋的一個(gè)示例是EnableCaching ,它基于類(lèi)路徑中可用的不同緩存實(shí)現(xiàn)來(lái)激活配置。

與之前的簡(jiǎn)單示例相比,編寫(xiě)此類(lèi)Enable *注釋要花費(fèi)更多的精力。 與之前一樣,從一個(gè)自定義注釋開(kāi)始:

@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Import(SomeBeanConfigurationSelector.class) public @interface EnableSomeBeansSelector {String criteria() default "default"; }

請(qǐng)注意,在這種情況下,自定義注釋具有一個(gè)稱(chēng)為標(biāo)準(zhǔn)的示例字段,我要做的是根據(jù)此標(biāo)準(zhǔn)激活兩組不同的bean。 這可以通過(guò)使用@Configuration選擇器來(lái)實(shí)現(xiàn),該選擇器可以根據(jù)上下文返回不同的@Configuration文件(在此示例中,criteria字段的值)。 該選擇器具有一個(gè)簡(jiǎn)單的簽名,這是一個(gè)示例實(shí)現(xiàn):

import org.springframework.context.annotation.ImportSelector; import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.type.AnnotationMetadata;public class SomeBeanConfigurationSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {AnnotationAttributes attributes =AnnotationAttributes.fromMap(importingClassMetadata.getAnnotationAttributes (EnableSomeBeansSelector.class.getName(), false));String criteria = attributes.getString("criteria");if (criteria.equals("default")) {return new String[]{"enableannot.selector.SomeBeanConfigurationDefault"};}else {return new String[]{"enableannot.selector.SomeBeanConfigurationType1"};}} }@Configuration class SomeBeanConfigurationType1 {@Beanpublic String aBean() {return "Type1";}}@Configuration class SomeBeanConfigurationDefault {@Beanpublic String aBean() {return "Default";}}

因此,如果條件字段為“默認(rèn)”,則添加“ SomeBeanConfigurationDefault”中的bean,否則添加“ SomeBeanConfigurationType1”中的bean

  • 這是一個(gè)具有工作樣本的要點(diǎn) 。

結(jié)論

我希望這能對(duì)Spring如何在內(nèi)部實(shí)現(xiàn)@ Enable *注釋有所了解,作為應(yīng)用程序開(kāi)發(fā)人員,您可能不需要自己創(chuàng)建此類(lèi)注釋,一種更簡(jiǎn)單的機(jī)制是使用@Configuration類(lèi)和Spring Bean配置文件來(lái)組成應(yīng)用程序。

翻譯自: https://www.javacodegeeks.com/2015/04/spring-enable-annotation-writing-a-custom-enable-annotation.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Spring Enable批注–编写自定义的Enable批注的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。