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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Enable annotation – writing a custom Enable annotation

發布時間:2025/4/5 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Enable annotation – writing a custom Enable annotation 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:https://www.javacodegeeks.com/2015/04/spring-enable-annotation-writing-a-custom-enable-annotation.html

Spring provides a range of annotations with names starting with?Enable*, these annotations in essence enable certain Spring managed features to be activated. One good example of such an annotation is?EnableWebMvcwhich brings in all the beans needed to support a MVC flow in Spring based applications. Another good example is the?EnableAsync?annotation to activate beans to support async functionality in Spring based applications.

I was curious about how such annotations work and wanted to document my understanding. The way these annotations are supported can be considered part of the SPI and so may break if the internal implementation changes in future.

Simple Enable* Annotations

One way to think about these custom annotations is that they add a set of new beans into the Spring’s application context. Let us start by defining one such custom annotation:

1@Retention(RetentionPolicy.RUNTIME)
2@Target(ElementType.TYPE)
3@interface?EnableSomeBeans {}

and apply this annotation on a Spring @Configuration class:

1@Configuration
2@EnableSomeBeans
3public?static?class?SpringConfig {}

So now to bring in a set of beans when this annotation is applied is as simple as adding the set of beans to bring in using @Import annotation this way:

1@Retention(RetentionPolicy.RUNTIME)
2@Target(ElementType.TYPE)
3@Import(SomeBeanConfiguration.class)
4@interface?EnableSomeBeans {}

That is essentially it, if this imported @Configuration class defines any beans, they would now be part of the Application context:

01@Configuration
02class?SomeBeanConfiguration {
03?
04????@Bean
05????public?String aBean1() {
06????????return?"aBean1";
07????}
08?
09????@Bean
10????public?String aBean2() {
11????????return?"aBean2";
12????}
13}

Here is a?gist?with a working sample.

Enable* Annotations with Selectors

Enable annotations can be far more complex though, they can activate a different family of beans based on the context around them. An example of such an annotation is?EnableCaching?which activates configuration based on different caching implementations available in the classpath.

Writing such Enable* annotations is a little more involved than the simpler example earlier. As before start with a custom annotation:

1@Retention(RetentionPolicy.RUNTIME)
2@Target(ElementType.TYPE)
3@Import(SomeBeanConfigurationSelector.class)
4public?@interface?EnableSomeBeansSelector {
5????String criteria()?default?"default";
6}

Note that in this case the custom annotation has a sample field called criteria, what I want to do is to activate two different set of beans based on this criteria. This can be achieved using a @Configuration selector which can return different @Configuration file based on the context(in this instance the value of the criteria field). This selector has a simple signature and this is a sample implementation:

01import?org.springframework.context.annotation.ImportSelector;
02import?org.springframework.core.annotation.AnnotationAttributes;
03import?org.springframework.core.type.AnnotationMetadata;
04?
05public?class?SomeBeanConfigurationSelector?implements?ImportSelector {
06????@Override
07????public?String[] selectImports(AnnotationMetadata importingClassMetadata) {
08????????AnnotationAttributes attributes =
09????????????????AnnotationAttributes.fromMap(
10????????????????????????importingClassMetadata.getAnnotationAttributes
11(EnableSomeBeansSelector.class.getName(),?false));
12????????String criteria = attributes.getString("criteria");
13????????if?(criteria.equals("default")) {
14????????????return?new?String[]{"enableannot.selector.SomeBeanConfigurationDefault"};
15????????}else?{
16????????????return?new?String[]{"enableannot.selector.SomeBeanConfigurationType1"};
17????????}
18????}
19}
20?
21@Configuration
22class?SomeBeanConfigurationType1 {
23?
24????@Bean
25????public?String aBean() {
26????????return?"Type1";
27????}
28?
29}
30?
31@Configuration
32class?SomeBeanConfigurationDefault {
33?
34????@Bean
35????public?String aBean() {
36????????return?"Default";
37????}
38?
39}

So if the criteria field is “default”, the beans in “SomeBeanConfigurationDefault” gets added in, else the one in “SomeBeanConfigurationType1”

  • Here is a?gist?with a working sample.

Conclusion

I hope this gives an appreciation for how Spring internally implements the @Enable* annotations, as an application developer you may not need to create such annotations yourself, a simpler mechanism will be to use @Configuration classes and Spring bean profiles to compose applications.

轉載于:https://www.cnblogs.com/davidwang456/p/6245751.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Spring Enable annotation – writing a custom Enable annotation的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲综合国产精品 | 国产婷婷色一区二区三区在线 | 国产一区二区黄 | 日韩亚洲欧美中文字幕 | 欧美精品在线看 | 91大片免费看 | 精品人妻一区二区三区四区 | 精品福利片| av手机免费看 | 操www| 亚洲成a人片777777久久 | 国产精品99久久久久久久久 | 日本高清网色 | 毛茸茸多毛bbb毛多视频 | 加勒比综合 | 日韩欧美国产电影 | 成人禁污污啪啪入口 | 亚洲欧美日韩在线不卡 | 日韩精品在线观看视频 | 99re7| 九九九九九伊人 | 妹子色综合 | 在线亚洲一区 | 91涩涩涩 | 偷拍中国夫妇高潮视频 | 伊人动漫| 蜜臀在线视频 | 国产在线视频你懂得 | 91福利视频在线观看 | 色哟哟官网 | 99精品自拍| 日本一二三区在线 | youjizz少妇 | 男生操男生网站 | 性xxxx| aa在线| 一区二区三区在线视频播放 | 国产精品theporn | 五十路中出 | wwwxxxx国产 | 久久久久久av无码免费网站 | 福利午夜视频 | 777欧美| a级片久久 | 日韩在线视频观看免费 | 新国产视频| 久久亚洲美女 | 日本一级二级视频 | 久久久久黄色 | 久久久久久91亚洲精品中文字幕 | 欧美人与禽zoz0性3d | 成人在线观看91 | 欧美日韩aa | 亚洲深夜在线 | 男女拍拍拍 | 国产午夜精品在线观看 | 中文区中文字幕免费看 | 91国产网站 | 久久激情视频 | 欧美色图在线视频 | 国产日韩综合 | jul023被夫上司连续侵犯 | 床戏高潮做进去大尺度视频网站 | 手机天堂av | 97人人干| 一个人看的毛片 | 久草老司机| 久久精品99久久久久久 | 日韩a在线播放 | 天天操天天玩 | 在线观看羞羞漫画 | 久久久成人免费 | 欧美两根一起进3p做受视频 | 国产伦精品 | 中文字幕无码精品亚洲35 | 精品福利在线观看 | 国产学生美女无遮拦高潮视频 | 国产网红主播精品av | 日日摸日日碰夜夜爽av | 国产精品一区在线观看你懂的 | 国产一区二区三区在线看 | 闷骚老干部cao个爽 av九九九 | 在线免费看污网站 | 日韩视频福利 | 一区二区手机在线 | 九九九九精品 | 黄色91在线观看 | 欧美精品欧美精品系列 | 欧美一级片网址 | 中国zzji女人高潮免费 | 国产污污视频在线观看 | 中文字幕久久网 | 日韩国产激情 | 亚洲国产精品电影 | 国产精品99久久久久久一二区 | 乱子伦视频在线看 | 伊人狼人综合 | 99999av| 91精品国产成人观看 |