纠纷奇闻作文社交美文家庭
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

为什么IDEA不推荐使用Autowired注入?

12月4日 不星湖投稿
  头条创作挑战赛前言
  最近项目上在做代码重构,在Bean的字段注入方式上,IDEA报了警告,Fieldinjectionisnotrecommended(字段注入是不被推荐的),如下图所示:
  作为有代码洁癖的我不能忍,大家都是这么用的啊,为什么会有这样的警告呢?有什么替代方案呢?为什么不推荐?
  因为Autowired在字段上注入实在是太方便了,有了Autowired基本不需要提供setter和构造器,省去了很多代码。但是Autowired字段注入存在下面的问题:NPE问题
  使用字段注入容易出现空指针问题,如下代码所示:因为SpringIOC容器在使用字段依赖注入时,并不会对依赖的bean是否为null做判断,因此在下面的代码中,通过Autowired注入的user对象可能为空,而JVM虚拟机在编译时也无法检测出user为null,只有在运行时调用user的方法时,发现user为null,出现空指针异常(NPE)。ComponentpublicclassFieldBasedInjection{privateSAutowiredprivatefinalUpublicFieldBasedInjection(){this。nameuser。getName();NPE}}
  总结一下,Java在初始化一个类时,是按照静态变量或静态语句块实例变量或初始化语句块构造方法Autowired的顺序。所以在执行这个类的构造方法时,对象实际尚未被注入,它的值还是null,如果属性在被注入前就拿来使用就会导致npe(空指针错误)。和IOC容器耦合度太高
  类通过属性输入,对外部不可见,类和容器的耦合度过高,导致无法脱离容器单独正确运行。比如下面的例子在Spring容器中运行没有问题。RestControllerpublicclassTestHandleController{AutowiredTestHandleServicetestHandleSpublicvoidhelloTestService(){testHandleService。hello();}}
  如果我们用下面的方式调用呢?TestHandleControllertestHandlenewTestHandleController();testHandle。helloTestService();空指针
  显而易见,就会出现空指针异常,依赖对外部不可见,外界可以看到构造器和setter,但无法看到私有字段,自然无法了解所需依赖,这样十分不利于单元测试。可能导致违反单一职责原则
  使用基于字段的注解,非常简单好用无脑,我们无需关注类之间的依赖关系,完全依赖于SpringIOC容器的管理,但是使用基于构造器注入的方式,我们需要手动在类代码中去编写需要依赖的类,当依赖的类越来越多,我们就能发现codesmell,这个时候就能显示的提醒我们,代码的质量是否有问题。因此,尽管字段注入不直接负责打破单一责任原则,但它通过隐藏了和构造器注入一样发现codesmell的机会。示例代码:ComponentpublicclassConstructorBasedInjection{privatefinalOprivatefinalObjectobject2;。。。privatefinalObjectobjectX;AutowiredpublicConstructorBasedInjection(Objectobject,Objectobject2,。。。,ObjectobjectX){this。this。object2object2;。。。this。objectXobjectX;}}和Spring框架高度耦合
  Autowired是Spring框架中的注解,如果你的应用程序想要更换一个IOC框架,虽然这种情况非常非常低,这时候你就需要修改大量的代码了。更推荐的是使用Resource注解,Resource注解是JSR250提供的,它是Java标准,我们使用的IOC容器应当去兼容它,这样即使更换容器,也可以正常工作。
  上面我们分析了基于Autowired字段注入方式的各种问题,所以IDEA也不推荐,那么如何解决呢?更推荐的做法【强烈推荐】使用构造器方式注入
  这也是Spring官方强烈推荐使用基于构造器注入的方式,像国内Dubbo、RocketMQ等很多开源框架的源码都已经转向了基于构造器的注入方式,所以开发中我们应该尊重Spring官方的推荐,尽管其他的方式可以解决,但是不推荐。【一般推荐】使用Resource注解
  如果你不喜欢构造器注入的方式,觉得使用构造器注入的方式麻烦,还要写代码,虽然不建议你这么想。那么更推荐你使用Resource注解,Resource是JSR250提供的,不是Spring中的注解,它是Java标准,我们使用的IoC容器应当去兼容它,这样即使更换容器,也可以正常工作。如果你使用这个注解IDEA也不会提示警告。
  我们再来看看这两者的区别,AutowiredVSResource。
  提供方Autowired是由Spring提供的,包名是:org。springframework。beans。factory。annotationResource是由Java提供的,包名是:javax。annotation
  依赖识别方式Autowired默认是以byType方式,可以使用Qualifier指定bean名称,如果找不到Bean不会自动使用byName方式。Resource默认是以byName方式,当byName方式无法匹配时,会使用byType方式。(仅适用于仅注册了一个Bean对象的类型)
  适用对象Autowired可以使用在方法,方法参数,构造器,构造器参数,字段上Resource只能使用在方法,字段上(经过实测,无法注解在构造器和参数上)
  强依赖型Autowired和Resource都是具有强依赖性,也就是必须要有这个bean才能启动,不过Autowired可以设置属性requiredfalse变成非强制注入。【不大推荐】关闭警告提示
  如果你是一个非常懒的人,不想改动任何代码,但又想去掉提示的话,那么我建议你可以直接关掉警告提示。
  打开EditorInspectionsSpringSpringCoreCodeNonrecommended‘field’injections,去掉右边的小勾勾,ApplyOK即可。
  但是你换一台电脑,重置配置后就又出现了。总结
  本文讲解了Spring字段注入时IDEA提示的警告信息,讲解这种注入方式的缺点,希望大家在今后的开发过程中多多使用构造器注入的方式,养成良好的编码习惯。
搜索 投诉 评论 转载

格纹衣服搭配图片少女格纹穿搭格纹服装同样也是休闲时尚主流行穿搭,这里给大家分享时尚红人许路儿的几种格纹服装的搭配方法,包括了格纹大衣、格纹外套、格纹裙子、格纹靴子以及格纹包包相关的搭配建议。说到逆龄……5间淘宝饰品便宜店铺推荐小资女必逛的超便宜淘宝饰品店秋冬即将来临,是时候该添入一些秋冬元素的配件了!走进饰品店总是被烧的体无完肤什么都想要吗却又不忍心花这么多钱吗?如果有这个困扰的人,淘宝会是你的另一个选择!下面5号网小编带大家……美女的穿衣搭配技巧图吸引邂逅的美人穿搭日本著名服装造型师鴫原子在吸引邂逅的穿搭法中提到,美人比例脸蛋2:发型3:穿搭5,这是她多年来在业界打滚得到的结论。常常在路上可以看到,穿着精心搭配的服装却素着一张脸,或者衣服……身材娇小女人穿衣搭配技巧中国女性的平均身高为161公分,所以我姑且把娇小定义为身高不满160公分。体型小的女性,穿衣服难免有较多限制(其实所有的体型都有适合与不适合),挑错长度或款式容易显得幼稚(不太……大码女装淘宝店推荐不踩雷高品质女装店大尺码的棉花糖女孩看过来,小编这次要来推荐不踩雷、质感又好的大尺码淘宝店家!模特儿身材约落在身高166公分以上,体重约90公斤,给大家最贴近自身身材的参考。大码女装淘宝店推荐……朝鲜使节眼中的明清东亚世界(朝鲜通信使画像)1765年洪大容的燕行与1764年朝鲜通信使以两者在中国和日本对情的体验为中心序言朝鲜燕行使从国都汉城出发之后北行前往中国的北京……湿祛一身轻,湿重百病生,6味祛湿药物送给你!建议收藏大家好我是刘医生,有句古话叫祛湿一身轻,体湿百病生。体内湿气重,一直是我们很多人的心头病,湿气一直反反复复。引发我们身体很多疾病,今天刘医生就给大家总结4种祛湿的药物。第……为什么IDEA不推荐使用Autowired注入?头条创作挑战赛前言最近项目上在做代码重构,在Bean的字段注入方式上,IDEA报了警告,Fieldinjectionisnotrecommended(字段注入是不被推荐的……cottweiler与reebok联名trial系列什么时候CottweilerxReebok带来的全新Trial系列鞋子都设计的非常好看,很有科技感,光是外形就特别吸引人。下面5号网小编给大家讲讲cottweiler与reebok联名……王煜全这个时代没机会了?还是说你没看到?过去的一年,我最常听到,也最常被问到的问题就是煜全,你说今天还有什么机会吗?,也常常听到比我小很多的年轻人在感叹互联网红利早都没了,未来没啥希望了。这些问题太多,以至于总……airjordanspizike黑水泥多少钱?乔丹斯派克李黑AJ斯派克李是乔丹系列非常经典的款了,最近又新出了一款JordanSpiz’ikeBlackCement黑水泥配色,非常好看,黑水泥也是耐克球鞋的经典配色了,特别受欢迎。下面5……吊带背心怎么搭配?吊带背心怎么搭配图片吊带背心是很多女生夏天会选择的款式,不仅很凉快,而且还可以展示自己的好身材,吊带背心的搭配非常重要,也是很多女生都很关注的。下面5号网小编给大家讲讲吊带背心怎么搭配?吊带背心怎……
卡通t恤女款穿搭闪亮登场早秋街头超吸睛时间初定!泰森富里Vs乌西克重量级终极统一战锁定2023年2拼接连衣裙藏肉显瘦6款连衣裙彰显气质优雅范高领毛衣搭配裙装显瘦时尚小仙女都这么穿一款优雅又浪漫的裙装女人成熟有魅力前中超冠军队王牌正式留洋,已跟欧洲球队签约,未来即将亮相首秀20222023赛季CBA联赛球馆巡礼乌鲁木齐市奥体中心体育线上共赏辰山植物园2022年第一枝染井吉野樱春季里的裙装都怎么穿美丽时尚好看就穿裙装你天生善良,人间疾苦,一样不落春季美女相亲必备外套搭配裙装优雅得体助成功让女人韵味十足的裙装6款端庄优雅裙装分享(图)
有效助你轻松甩掉粗大毛孔小妙招操作指南通过JumpServer实现Kubernetes运维蕃近有干字韵属教授兄而知县尉零度啤酒开车也能喝?交警饮用过多也可能酒驾大地色眼影哪个牌子好日常系眼影就靠棕色眼影五部欧美限制级电影,都是大尺度,这次你不一定都看过金九福今日黄金价格长长的海岸线次韵子京早春雨中拜耳Bepanthen祛疤痕膏说明书拜耳Bepanthen祛家乡端午节作文素材包粽子新电脑只有一个盘怎么办教你种方法轻松

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形