应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

springboot的ConditionalOnBean注解

  一、ConditionalOnXX注解初识
  ConditionalOnXX注解被定义在了springbootautoconfigure包中,有以下几个,
  从上图中可以看到经常碰到的ConditionalOnBean、ConditionalOnClass、ConditionalOnMissingBean、ConditionalOnMissingClass、ConditionalOnProperty、ConditionalOnResource、ConditionalOnSingleCandidate等。这些注解均在org。springframework。boot。autoconfigure。condition包下,感兴趣的小伙伴可以自行查看源码。二、深入ConditionalOnBean注解
  上面提到了多个ConditionalOnXX注解,下面逐一对这些常见的注解进行讲解。有意思的是,这些注解很多都是成对出现的,而且意思都是相近的。今天先来看下CondtionalOnBean注解2。1、ConditionalOnBean
  ConditionalOnBean注解的定义如下,
  可以明确的一点是ConditionalOnBean可以用在类方法上。可以配置的属性有下面这些,
  平时用的比较多的有value、type、name三个,这三个可以看到都是数组,也就是说可以配置多个。
  上面提到ConditionalOnBean可以配置在方法上,是所有的方法都可以吗?2。2、ConditionalOnBean如何标识方法
  ConditionalOnBean标识在方法上,可以标识在所有的方法上吗,这个我们要从该注解的注释上去找答案了。
  从上面的注释可以知道,ConditionalOnBean注解使用在Bean标识的方法上,都知道Bean注解的作用是向容器中注入一个bean,也就是ConditionalOnBean作用的时机是在生成bean的时候。再看注释thebeanclassdefaultstoreturntypeofthefactorymethod,大体意思是默认返回的bean是工厂方法的类型,这个不好理解,通过一个例子看下。2。2。1、ConditionalOnBean(value)
  MyAutoConfig。javapackagecom。my。template。config;importorg。springframework。boot。autoconfigure。AutoConfigureAfter;importorg。springframework。boot。autoconfigure。condition。ConditionalOnBean;importorg。springframework。boot。autoconfigure。condition。ConditionalOnClass;importorg。springframework。context。annotation。Bean;importorg。springframework。context。annotation。Configuration;配置类date20227215:02ConfigurationpublicclassMyAutoConfig{Bean(valueclassA)publicClassAclassA(){returnnewClassA();}BeanConditionalOnBean(value{ClassA。class})publicClassBclassB(){returnnewClassB();}}
  在上面的配置类中,在Bean注解的方法上使用了ConditionalOnBean注解,注解中使用的value属性,代表的是只要存在ClassA这个类边会执行classB()方法,下面看ClassA和ClassB都很简单,就是两个普通的类,
  ClassA。java和ClassB。javapackagecom。my。template。config;date20227215:03publicclassClassA{publicClassA(){System。out。println(constructorclassA);}}packagecom。my。template。config;date20227215:04publicclassClassB{publicClassB(){System。out。println(constructorclassB);}}
  看下启动日志是否会打印构造方法中的日志,
  可以看到正常打印了,也就是说ClassA和ClassB均被注入到了容器中,这是使用ConditionalOnBean(value)的情况,下面看使用ConditionalOnBean(type)的情况,2。2。2、ConditionalOnBean(type)
  这里的type要求填入的是类的全路径,比如com。my。template。config。ClassA
  把配置类中修改为下面的样子,
  再次启动观察日志,
  从日志中可以看到依旧是可以的,下面我把MyAutoConfig类中的classA()方法,放到classB()方法下面,
  再执行看日志,
  可以看到没有执行ClassB的构造方法,也就是classB()方法没执行。可以得出:在配置类中的Bean标识的方法是有顺序的,前边的会先解析,后边的后解析,后面的要引用前面的是引用不到的,反之则可以。
  这种方式下,没有其他方式可以执行classB()方法吗,有的,使用ConditionalOnClass(value{ClassA。class}),感兴趣的小伙伴可以自己试试哦。2。2。3、ConditionalOnBean(name)
  下面看使用name属性的情况,
  MyAutoConfig。java修改成下面的样子,
  启动日志如下,
  正常启动,且初始化了ClassB类。2。3、ConditionalOnBean标识类
  这里说的标识类,我们一般都默认为标识配置类,即带有Configuration注解的类。这里同时会有value、type、name三种不同的属性配置,需要注意的是value配置的是Class对象,标识的是只要在解析过程中加载了该类即可。type配置的是全类名,name配置的是bean的名称,type和name的配置要求的是需要解析了该BeanDefinition,同时和顺序是有关系的。演示下面的例子
  MyAutoConfig。javapackagecom。my。template。config;importorg。springframework。boot。autoconfigure。condition。ConditionalOnBean;importorg。springframework。boot。autoconfigure。condition。ConditionalOnClass;importorg。springframework。context。annotation。Bean;importorg。springframework。context。annotation。Configuration;自动配置类date20227215:02ConfigurationConditionalOnBean(type{com。my。template。config。ClassA})publicclassMyAutoConfig{publicMyAutoConfig(){System。out。println(constructorMyAutoConfig);}}
  MyAutoConfig2。javapackagecom。my。template。config;importorg。springframework。boot。autoconfigure。condition。ConditionalOnBean;importorg。springframework。context。annotation。Bean;importorg。springframework。context。annotation。Configuration;自动配置类authorwangcj5date20227215:02ConfigurationpublicclassMyAutoConfig2{BeanpublicClassAclassA(){returnnewClassA();}publicMyAutoConfig2(){System。out。println(constructorMyAutoConfig2);}}
  启动日志如下,
  可以看到实例化了MyAutoConfig2,但是MyAutoConfig确没有,这是因为其类上有ConditionalOnBean(type{com。my。template。config。ClassA})注解,且在解析MyAutoConfig时并未解析ClassA,把该注解换成ConditionalOnBean(value{ClassA。class})看看可以吗
  可以看到还是不行,那么换成ConditionalOnClass(value{ClassA。class})
  完美解决问题。三、总结
  本文主要分析了ConditionalOnBean注解的使用场景,
  1、该注解的作用时机是在生成bean的时候,确切的说是在解析beanDefinition的时候
  2、该注解可以用在配置类和标识有Bean的方法上;
  3、三个常用属性value、name、type均有解析顺序的问题;
  4、value、name、type各自的配置方式

高科技公司破产卖楼,被疯狂小杨哥1亿元拍下,你有什么启发我们梳理下脉络科技公司欠债8400万卖楼,25岁抖音网红花1亿买下!本人回应:不是我们把它干倒闭的高科技公司破产清算卖楼,抖音网红1亿买下!近日,抖音带货主播疯狂小杨哥1……什么牌子的饼干好吃?经测评,这6款饼干口味好,回购率超高饼干是好吃的零食之一,在逛超市选择零食时,往往最先挑选的也是饼干,如今饼干的种类太多了,有奶油夹心口味,巧克力夹心口味、有咸味的、有甜味的、有巧克力口味的等等,很容易让人挑花眼……十一探车市缩短交付周期,变相优惠新能源车抢收销量逐渐成为刚需的新能源车,面对即将突破的30市占率目标,十一假期成为车企增量焦点。北京商报记者走访发现,目前车源短缺已得到缓解,提车周期缩短下终端价格也出现松动,多家新能源车品牌……9号正式服5位英雄调整,娜可露露回复效果增强,海月迎来首次加Hello,大家好,这里是头号游戏,带给大家最新的王者游戏资讯。一般的情况下,正式服都是在早上更新,有的时候是新的活动内容,也有的时候是英雄调整,但是没有想到,在九号下午……全球第四大车企出现市值超5800亿,将大众奔驰宝马甩在身后2022年9月底,保时捷正式在法兰克福敲钟上市,成为继法拉利、阿斯顿马丁之后,第三个登陆资本市场的超豪华汽车品牌,这也是德国历史上第二大IPO、欧洲历史上第三大IPO。截至10……浅谈沃尔沃S90T8车型领航辅助系统现在越来越多的新能源车型都配置有各式各样的辅助驾驶系统,从普通的AP到NGP再到更强大的FSD。辅助驾驶的概念也在不断向车友们的日常驾驶渗透。S90T8作为一台插电混动型新能源……全队指责!勇管科尔力批格林,库里罕见发声他必须向普尔道歉在昨天,勇士队的内部也是出现了不和谐的声音,此前根据多位名记联合报道,在勇士队训练赛上,格林与普尔发生了激烈冲突,前者甚至在冲突中挥拳。作为勇士队选秀出身的普尔与格林,这样发生……不仅60万,四川女篮再送豪礼,李梦老板解决户口还帮我父母治病女篮世界杯,中国女篮时隔28年再一次追平了女篮历史上的最佳战绩,她们满载而归,重新捧起了女篮世界杯亚军的奖杯。重返巅峰,也让给中国女篮的姑娘们受到了许多的奖励,比如说某乳制品奖……央视再次聚焦云台山!假期第6天,焦作市接待游客9。64万人次国庆假期期间,焦作市开启连续阴雨模式,近郊游成为大多数人的首选,人们纷纷走出家门,投入乡间田野的怀抱,享受别样快乐。国庆假期第6天,全市接待游客9。64万人次。全市旅游市场秩序……媒体人宁波男篮已签约CBA旧将中锋马尔科托多罗维奇直播吧10月6日讯今日,据媒体人所罗门的臣仆报道,宁波男篮已经签下上赛季效力于北控男篮的黑山籍中锋马尔科托多罗维奇。托多罗维奇(MarkoTodorovic),1992年……世界杯前瞻世界杯直播3位突破性年轻球星可能留下深刻印象(AK从2010年轻的托马斯穆勒,到现在2014年轻的詹姆斯罗德里格斯和2018年轻的赫文洛萨诺,每四年至少有一位年轻球员在世界舞台上证明自己,以下三位是2022年该荣誉的一些竞争者……喝茶弊大于利?那是因为没喝对!改掉2个坏习惯,让喝茶好处翻倍尽管如今是21世纪,但仍有许多人对喝茶有误解,认为喝茶是弊大于利的,因为出现过许多喝茶多了对身体不好的案例。有的人认为喝茶有碍睡眠,或者容易伤害脾胃等。之所以会有这些认知……
10句蕴含人生哲理的文案,句句经典,发人深省早上好呀,今天给大家分享一些人生感悟的文案!希望大家喜欢!欢迎阅读分享!〔心〕一、没有人会搀扶你一辈子,你总得为自己谋一个吃饭的本事。二、有些人一旦错过了,就是一辈……美国经济如果衰退,这两个亚洲国家首当其冲经济学家警告说,如果美国陷入衰退,亚洲将不会毫发无损,但东南亚的一些国家将受到比其他国家更严重的打击。美国通胀和衰退之间的拉锯战仍在继续,美联储(FederalReser……金刚奥提兹惨遭3次击倒,鏖战全场点数惜败,年轻几岁必KO鲁伊【文搏击江湖】北京时间9月5日中午,在美国洛杉矶,前重量级三冠王墨西哥裔美国人小胖子安迪鲁伊兹(352,22KO)3次击倒古巴金刚路易斯奥提兹(333,28KO),最终打满了全……张公子连夜回归,解开辽宁心结!郭艾伦不是必需品,有他就能夺冠北京时间9月5日,深夜22点30分,国内权威媒体咪咕体育重磅爆料,中国杜兰特张镇麟回国,他终于回来了。而现在这位辽宁队苦等许久的第1天才紧急回归,也没有辜负球队之前要专门……03!西甲7195万劲旅轰然倒下,4连败丢10球,恐以最耻辱本周末,西甲联赛第4轮展开了交锋,在其中一场比赛中,由塞尔塔对阵加的斯。这是一场一边倒的比赛,加的斯上半场的防守还十分稳固,但是在下半场却崩盘了。第56分钟,阿斯帕斯远射得手,……31!巴黎太猛,豪取7连胜,目标9分,梅西冲本菲卡首球10月6日凌晨,欧冠第3轮继续进行,巴黎圣日耳曼客场挑战本菲卡,加尔蒂埃渴望战胜对手,拿满三分。在赛前,两队同积6分,巴黎以进球多力压本菲卡,领跑积分榜。巴黎近况如日中天,豪取……二手iPhone你还在用?值得入手吗?每年10月左右大量的二手机就开始涌入市场,各种充新机、靓机、后封机层出不穷,今天和大家分享一下二手机市场混乱的三大原因。1。没有一个二手机的卖家可以保证回收回来的的二手机……游戏早报暗黑like新游今日上演中韩大战,你会选择玩哪款?【17173专稿,转载请注明出处】各位玩家朋友们早上好呀!一起来看看昨天都有哪些游戏圈的大事发生吧。《宝可梦:朱紫》今晚有新爆料《宝可梦:朱紫》将于北京时间1……鉴定下小红书热门相机(5)Hi,我是溢图科技。继续鉴定小红书热门相机宾得OptioH90发布于2010年1月。它基于功能美概念开发,具有简洁、优雅的机身外形,提供橙、白、黑三种配色。不过和外……盘点搭载索尼IMX700的手机,大家用过哪款?【1】华为P40搭载麒麟9905G旗舰芯片,7nmEUV制程工艺,103亿颗晶体管,CPU三档能效架构,性能与能效皆大幅提升,大型文件处理手到擒来,各类计算任务游刃有余……波士顿牛仔连衣裙在季节交替的时期,总是会有乱穿衣、穿什么的烦恼,如果一时拿不定主意,翻翻衣橱里的牛仔系列,说不定会能得到些灵感,轻松过早秋。金属拉链在连衣裙的运用中较为广泛,……精华液推荐这些精华液美白补水保湿抗皱,让肌肤不仅更白更透精华液推荐:这些精华液美白补水保湿抗皱,让肌肤不仅更白更透!资生堂AQUALABEL精华液这瓶美容精华液中蕴含了丰富蜂王浆原液和透明质酸,有着非常好的抗衰老效果,让肌肤不……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网