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

Spring注入属性时到底都能注入什么样的数据类型你都知道吗

  1判断类型
  注入的属性判断其类型:OptionalObjectFactoryObjectProviderjavax。inject。ProviderpublicclassDefaultListableBeanFactoryextendsAbstractAutowireCapableBeanFactoryimplementsConfigurableListableBeanFactory,BeanDefinitionRegistry,Serializable{privatestaticClasslt;?javaxInjectProviderClass;static{try{javaxInjectProviderClassClassUtils。forName(javax。inject。Provider,DefaultListableBeanFactory。class。getClassLoader());}catch(ClassNotFoundExceptionex){javaxInjectProviderClassnull;}}publicObjectresolveDependency(DependencyDescriptordescriptor,NullableStringrequestingBeanName,NullableSetStringautowiredBeanNames,NullableTypeConvertertypeConverter)throwsBeansException{if(Optional。classdescriptor。getDependencyType()){returncreateOptionalDependency(descriptor,requestingBeanName);}elseif(ObjectFactory。classdescriptor。getDependencyType()ObjectProvider。classdescriptor。getDependencyType()){returnnewDependencyObjectProvider(descriptor,requestingBeanName);}elseif(javaxInjectProviderClassdescriptor。getDependencyType()){returnnewJsr330Factory()。createDependencyProvider(descriptor,requestingBeanName);}else{判断是否有Lazy注解,如果有该注解那么会创建代理对象,否则返回null总结:如果注入的属性有Lazy注解,那么会返回由ProxyFactory对象创建的代理对象ObjectresultgetAutowireCandidateResolver()。getLazyResolutionProxyIfNecessary(descriptor,requestingBeanName);if(resultnull){解析查找依赖注入的对象resultdoResolveDependency(descriptor,requestingBeanName,autowiredBeanNames,typeConverter);}returnresult;}}}2查找依赖对象publicclassDefaultListableBeanFactoryextendsAbstractAutowireCapableBeanFactoryimplementsConfigurableListableBeanFactory,BeanDefinitionRegistry,Serializable{publicObjectdoResolveDependency(DependencyDescriptordescriptor,NullableStringbeanName,NullableSetStringautowiredBeanNames,NullableTypeConvertertypeConverter)throwsBeansException{InjectionPointpreviousInjectionPointConstructorResolver。setCurrentInjectionPoint(descriptor);try{Objectshortcutdescriptor。resolveShortcut(this);if(shortcut!null){returnshortcut;}Classlt;?typedescriptor。getDependencyType();判断需要注入的类型是否是一个集合(如何:ListUsersbeans)2。1ObjectmultipleBeansresolveMultipleBeans(descriptor,beanName,autowiredBeanNames,typeConverter);if(multipleBeans!null){returnmultipleBeans;}查找与所需类型匹配的bean实例2。2MapString,ObjectmatchingBeansfindAutowireCandidates(beanName,type,descriptor);if(matchingBeans。isEmpty()){if(isRequired(descriptor)){raiseNoMatchingBeanFound(type,descriptor。getResolvableType(),descriptor);}returnnull;}StringautowiredBeanName;ObjectinstanceCandidate;如果找到多个if(matchingBeans。size()1){在这里会判断多个Bean中是否有一个Primary注解的Bean如果没有Primary,继续获取是否有Priority(优先级)注解如果没有则返回null,如果有则返回值越小的优先级越高(如果有多个优先级一样,则系统报错)如果上面都返回的null,那么最后会通过beanName进行匹配autowiredBeanNamedetermineAutowireCandidate(matchingBeans,descriptor);if(autowiredBeanNamenull){if(isRequired(descriptor)!indicatesMultipleBeans(type)){如果是必须的或者不是集合类型的Bean注入;那么这里抛出异常returndescriptor。resolveNotUnique(descriptor。getResolvableType(),matchingBeans);}else{returnnull;}}instanceCandidatematchingBeans。get(autowiredBeanName);}else{Wehaveexactlyonematch。Map。EntryString,ObjectentrymatchingBeans。entrySet()。iterator()。next();autowiredBeanNameentry。getKey();instanceCandidateentry。getValue();}if(autowiredBeanNames!null){autowiredBeanNames。add(autowiredBeanName);}if(instanceCandidateinstanceofClass){instanceCandidatedescriptor。resolveCandidate(autowiredBeanName,type,this);}ObjectresultinstanceCandidate;if(resultinstanceofNullBean){if(isRequired(descriptor)){raiseNoMatchingBeanFound(type,descriptor。getResolvableType(),descriptor);}resultnull;}if(!ClassUtils。isAssignableValue(type,result)){thrownewBeanNotOfRequiredTypeException(autowiredBeanName,type,instanceCandidate。getClass());}returnresult;}finally{ConstructorResolver。setCurrentInjectionPoint(previousInjectionPoint);}}}2。1判断集合类型
  判断需要注入的属性的数据类型是否是如下几种。StreamDependencyDescriptorArrayCollectionMappublicclassDefaultListableBeanFactoryextendsAbstractAutowireCapableBeanFactoryimplementsConfigurableListableBeanFactory,BeanDefinitionRegistry,Serializable{privateObjectresolveMultipleBeans(DependencyDescriptordescriptor,NullableStringbeanName,NullableSetStringautowiredBeanNames,NullableTypeConvertertypeConverter){Classlt;?typedescriptor。getDependencyType();if(descriptorinstanceofStreamDependencyDescriptor){MapString,ObjectmatchingBeansfindAutowireCandidates(beanName,type,descriptor);if(autowiredBeanNames!null){autowiredBeanNames。addAll(matchingBeans。keySet());}StreamObjectstreammatchingBeans。keySet()。stream()。map(namedescriptor。resolveCandidate(name,type,this))。filter(bean!(beaninstanceofNullBean));if(((StreamDependencyDescriptor)descriptor)。isOrdered()){streamstream。sorted(adaptOrderComparator(matchingBeans));}returnstream;}elseif(type。isArray()){Classlt;?componentTypetype。getComponentType();ResolvableTyperesolvableTypedescriptor。getResolvableType();Classlt;?resolvedArrayTyperesolvableType。resolve(type);if(resolvedArrayType!type){componentTyperesolvableType。getComponentType()。resolve();}if(componentTypenull){returnnull;}MapString,ObjectmatchingBeansfindAutowireCandidates(beanName,componentType,newMultiElementDescriptor(descriptor));if(matchingBeans。isEmpty()){returnnull;}if(autowiredBeanNames!null){autowiredBeanNames。addAll(matchingBeans。keySet());}TypeConverterconverter(typeConverter!null?typeConverter:getTypeConverter());Objectresultconverter。convertIfNecessary(matchingBeans。values(),resolvedArrayType);if(resultinstanceofObject〔〕){ComparatorObjectcomparatoradaptDependencyComparator(matchingBeans);if(comparator!null){Arrays。sort((Object〔〕)result,comparator);}}returnresult;}elseif(Collection。class。isAssignableFrom(type)type。isInterface()){Classlt;?elementTypedescriptor。getResolvableType()。asCollection()。resolveGeneric();if(elementTypenull){returnnull;}MapString,ObjectmatchingBeansfindAutowireCandidates(beanName,elementType,newMultiElementDescriptor(descriptor));if(matchingBeans。isEmpty()){returnnull;}if(autowiredBeanNames!null){autowiredBeanNames。addAll(matchingBeans。keySet());}TypeConverterconverter(typeConverter!null?typeConverter:getTypeConverter());Objectresultconverter。convertIfNecessary(matchingBeans。values(),type);if(resultinstanceofList){if(((Listlt;?)result)。size()1){ComparatorObjectcomparatoradaptDependencyComparator(matchingBeans);if(comparator!null){((Listlt;?)result)。sort(comparator);}}}returnresult;}elseif(Map。classtype){ResolvableTypemapTypedescriptor。getResolvableType()。asMap();Classlt;?keyTypemapType。resolveGeneric(0);if(String。class!keyType){returnnull;}Classlt;?valueTypemapType。resolveGeneric(1);if(valueTypenull){returnnull;}MapString,ObjectmatchingBeansfindAutowireCandidates(beanName,valueType,newMultiElementDescriptor(descriptor));if(matchingBeans。isEmpty()){returnnull;}if(autowiredBeanNames!null){autowiredBeanNames。addAll(matchingBeans。keySet());}returnmatchingBeans;}else{returnnull;}}}2。2查找BeanpublicclassDefaultListableBeanFactoryextendsAbstractAutowireCapableBeanFactoryimplementsConfigurableListableBeanFactory,BeanDefinitionRegistry,Serializable{protectedMapString,ObjectfindAutowireCandidates(NullableStringbeanName,Classlt;?requiredType,DependencyDescriptordescriptor){通过类型获取指定类型的BeanString〔〕candidateNamesBeanFactoryUtils。beanNamesForTypeIncludingAncestors(this,requiredType,true,descriptor。isEager());MapString,ObjectresultCollectionUtils。newLinkedHashMap(candidateNames。length);resolvableDependencies集合中保存了,容器内置的和自定义注册的依赖注入对象(如:HttpServletRequest对象的注入为该集合内部指定的对象)for(Map。EntryClasslt;?,ObjectclassObjectEntry:this。resolvableDependencies。entrySet()){Classlt;?autowiringTypeclassObjectEntry。getKey();if(autowiringType。isAssignableFrom(requiredType)){ObjectautowiringValueclassObjectEntry。getValue();autowiringValueAutowireUtils。resolveAutowiringValue(autowiringValue,requiredType);if(requiredType。isInstance(autowiringValue)){result。put(ObjectUtils。identityToString(autowiringValue),autowiringValue);break;}}}for(Stringcandidate:candidateNames){判断是否自己引用自己if(!isSelfReference(beanName,candidate)isAutowireCandidate(candidate,descriptor)){addCandidateEntry(result,candidate,descriptor,requiredType);}}if(result。isEmpty()){booleanmultipleindicatesMultipleBeans(requiredType);Considerfallbackmatchesifthefirstpassfailedtofindanything。。。DependencyDescriptorfallbackDescriptordescriptor。forFallbackMatch();for(Stringcandidate:candidateNames){if(!isSelfReference(beanName,candidate)isAutowireCandidate(candidate,fallbackDescriptor)(!multiplegetAutowireCandidateResolver()。hasQualifier(descriptor))){addCandidateEntry(result,candidate,descriptor,requiredType);}}if(result。isEmpty()!multiple){Considerselfreferencesasafinalpass。。。butinthecaseofadependencycollection,nottheverysamebeanitself。for(Stringcandidate:candidateNames){if(isSelfReference(beanName,candidate)(!(descriptorinstanceofMultiElementDescriptor)!beanName。equals(candidate))isAutowireCandidate(candidate,fallbackDescriptor)){addCandidateEntry(result,candidate,descriptor,requiredType);}}}}returnresult;}}
  以上就是Spring在注入属性的时候会判断是什么数据类型进行相应的操作
  完毕!!!
  公众:SpringBootCloud实战案例锦集
  SpringRetry重试框架的应用
  SpringBootWebFlux整合SpringSecurity进行权限认证
  SpringMVC异常处理方式Spring事务实现原理源码分析
  Spring容器这些扩展点你都清楚了吗?
  Spring自定义Advisor以编程的方式实现AOP
  SpringBoot邮件发送示例
  SpringBoot多数据源配置详解
  SpringBoot配置文件你了解多少?
  在SpringCloud中你还在使用Ribbon快来试试LoadBalancer

连羊蝎子都能在滚烫中笑出来,你也加油吧你仔细看,有没有觉得它笑呵呵的很可爱?前阵子我正愁接下来该做什么菜才好的时候,我们摄影同事给我发来了一张羊蝎子的照片,发来了灵魂提问。要是别人跟我说这个,我还不会有……广州队首胜!河北五连败开局!追平队史中超连败纪录北京时间6月19日晚上19:30,中超联赛迎来了一场焦点对阵,最终广州队1:0小胜河北队,取得了联赛首胜的同时,也送给了对手联赛五连败。这两支球队早就不是当初金元模式下的中超豪……在零下71度的地方上厕所就看你有没有胆量了,这个地方你想去吗世界上有个零下七十一度的地方你敢去吗?在那里香蕉都可以用来钉钉子要是想上厕所就看你有没有胆子出门了就算出门了不了几步你就想找个暖和的屋子一头扎进去……全球高通胀,国内物价是否会大幅上涨?国家发改委回应全球普遍高通胀情况下,后期国内物价会不会也大幅上涨?对此,在16日上午举行的国家发改委例行发布会上,新闻发言人孟玮回应,展望今年后期,我国粮油肉蛋奶果蔬等重要民生商品生产……从6799元跌至4499元,苹果A14128GB,618库克声明:原创不易,禁止搬运,违者必究!如果打算入手一款高端旗舰手机,很多人会选择苹果或者是华为。不过这两年华为的手机产品越来越稀缺了,加上不支持5G网络,也影响了华为手机的……赵雅芝秀自家豪宅!被帅气儿子猛夸好幸福,坐着涂指甲油显少女心近日,已经68岁的赵雅芝在社交账号上晒出一段与宝贝儿子黄恺杰在自家别墅内合拍的搞笑段子,秀了一把母慈子孝的亲情,不少网友纷纷投来羡慕的眼光,除了羡慕赵雅芝有这么一个帅气孝顺的儿……越简约的穿搭越高级,今夏衬衫又火了,让你轻松穿出不俗气质俗话说,越简约的穿搭越高级,这是亘古不变的真理,不管时尚界轮回多少次,那些简约大气的单品永远会得到女性的青睐。今年夏季,衬衫又火了,作为万金油般的存在,它几乎是所有熟女的必备,……为什么有人说不提倡用酵母蒸馒头?今天告诉你答案用酵母蒸馒头方便快捷,受到了越来越多人的青睐,尤其是在南方地区。那么为什么还是有很多人说不提倡用酵母蒸馒头呢?我认为持此说法的人大致可分为两类1、餐饮从业人员……地磁暴引起大气阻力增加,极端情况下可致航天器陨落由于遭遇地磁暴,美国太空探索技术公司(SpaceX)在2月3日发射的49颗星链卫星中,多达40颗卫星于次日已经或将要坠入大气层损毁。SpaceX官方表示:受地磁暴影响,卫星所在……可怜的小女孩,要坚强,你是最棒的今天看到苏州一个小孩独自隔离的新闻,瞬间泪目,谁不爱自己的孩子?谁忍心让孩子受苦?这是每一个父母和长辈都于心不忍的事。但是,作为家长,有时候真的要忍一忍,控制住情感掀腾,……你是大熊,我是兔子烦人的兔子的拓展游戏一,月亮也曾经不感兴趣很暖的绘本,第一遍给月亮讲时月亮没看出兴趣来。我喜欢的绘本没给娃讲兴奋了,那不是书的问题,一定是我讲的有问题。偷偷把这本书放到了桌头柜上。之后……孙一宁事件新消息2月15日,孙一宁事件男主郦文祥再次发声,他录制了一段视频,郦文祥对着镜头崩溃大哭,对爸妈说我先走一步了。郦文祥透露,他遭到了孙一宁粉丝的网暴,孙一宁要求他向自己道歉,但他没同……
小米首款支持手写笔的电纸书目前小米商城在售的小米电纸书系列共三款:小米多看电纸书小米多看电纸书Pro小米电纸书Note小米电纸书Note小米电纸书Note10。3英寸纯平设……新十条来了!外出旅游探亲返乡需要注意什么?2022年马上要结束了,3年过后我们终于在年尾迎来了新十条措施的出台,这意味着这场公共卫生事件进入了一个全新的阶段,居民的生活、工作开始逐渐恢复正常。2022年结束以后我……试图给俄罗斯油价戴帽恐难如愿周密商务部国际贸易经济合作研究院研究员近日,七国集团和欧盟达成一致,同意对俄罗斯出口原油设定每桶60美元的价格。这些原油市场的买方不是选择增加集体议价权,而是直接给出了限……倒计时一天!漫漫研途,鲁大与你一起!漫漫研途终有回转垂眸望海举目向山每一个比登上山顶更辉煌的理想背后是不惧风雪不畏跋涉的骄傲明日考研大幕开启请用尽全力写下最后的篇章这就是我们所……Meiko国服事件中单道歉希望Meiko粉丝不要再网暴我和我12月27日讯今日Meiko国服事件队友回应涉事中单道歉:对不起我不应该骂Meiko的,以后不会再互动了。全文如下:我是糊涂虫,我是那把Meiko对局里的龙王,对不起我不……预定2023年新机爆款王?一加11获得多位数码博主肯定感觉很多小伙伴都想要在年末换购新手机了,不过我还是觉得可以再等等,比如等等看即将在1月4号推出的骁龙8Gen2手机一加11。这款新机最近的爆料可谓是一波接着一波,而且爆料内容的……基金明天将会大幅度震荡今天市场小幅高开,开于3177点,走了一个高开低走,因为最高点只有3179点,最高点比开盘点只高了2个点,而收盘点位是3168点,比开盘点只下跌了11个点,整体是小幅震荡走势。……娱乐圈头号咸猪手,带着老婆博同情,如今直播带货全程0销量2011年11月24日,陈浩民带着即将离开的妻子在记者会上含泪道歉,恳求大家原谅自己的酒后行为。说起陈浩民大家并不陌生1996年,他在《龙族八部》中饰演段誉,成为观众心中……2022年全球最常用密码排行榜公布password第一【CNMO新闻】如今的手机APP越用越多,我们要记住的密码也越来越多。有没有这么一种可能,很多用户在不同APP上设置的是一样的密码?这当然是大多数人的做法,否则这么多密码我们怎……没阳阳了阳过都该怎么办?一图了解往期精选公示!昭通拟再添2个国家3A级旅游景区昭通市民:越晚阳性,症状可能越轻加强疫苗来了!这些人群可接种天气预警!昭通这些路段已结冰79名!昭通……早安语录昨日已经翻篇,新的一天如约而来,不惧未来,不念过往早安语录Jan4(1)早上好喜欢一个人的感觉大概就是无论他穿什么颜色的衣服都觉得好看新的一天又开始了为了这个男人努力吧(2)……记住乡愁为曾高飞散文集每个人的故乡,都在流浪作序雷鸣球这是一个伟大的时代,被我们迎头赶上了。我们有幸成为伟大时代的见证者、亲历者、参与者、建设者。人生追梦,实现家国情怀,只要努力、坚持、不放弃。为改变命运,……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网