范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

常见的三种注解注入方式对比

  1. 常见的三种注解注入方式对比Field 注入
  java @Controller public class HelloController {     @Autowired     private AlphaService alphaService;     @Autowired     private BetaService betaService; }
  field 注入方式是使用最多的,原因是这种方式使用起来非常简单,代码更加简洁。 Setter 方法注入
  java @Controller public class HelloController {     private AlphaService alphaService;     private BetaService betaService;          @Autowired     public void setAlphaService(AlphaService alphaService) {         this.alphaService = alphaService;     }     @Autowired     public void setBetaService(BetaService betaService) {         this.betaService = betaService;     } }
  在 Spring 3.x 刚推出的时候,Spring 官方在对比构造器注入和 Setter 注入时,推荐使用 Setter 方法注入:
  Spring 3.x Constructor-based or setter-based DI? The Spring team generally advocates setter injection, because large numbers of constructor arguments can get unwieldy, especially when properties are optional. Setter methods also make objects of that class amenable to reconfiguration or re-injection later. Management through JMX MBeans is a compelling use case.
  Some purists favor constructor-based injection. Supplying all object dependencies means that the object is always returned to client (calling) code in a totally initialized state. The disadvantage is that the object becomes less amenable to reconfiguration and re-injection.
  意思是说,当出现很多注入项的时候,构造器参数可能会变得臃肿,特别是当参数时可选的时候。Setter 方式注入可以让类在之后重新配置和重新注入; Constructor 注入
  java @Controller public class HelloController {     private final AlphaService alphaService;     private final BetaService betaService;          @Autowired     public HelloController(AlphaService alphaService, BetaService betaService) {         this.alphaService = alphaService;         this.betaService = betaService;     } }
  Spring 4.x 的时候,Spring 官方在对比构造器注入和 Setter 注入时,推荐使用构造器注入方式:
  Spring 4.x Constructor-based or setter-based DI? The Spring team generally advocates constructor injection as it enables one to implement application components as  immutable objects  and to ensure that required dependencies are not  null  . Furthermore constructor-injected components are always returned to client (calling) code in a fully initialized state. As a side note, a large number of constructor arguments is a bad code smell, implying that the class likely has too many responsibilities and should be refactored to better address proper separation of concerns.
  Setter injection should primarily only be used for optional dependencies that can be assigned reasonable default values within the class. Otherwise, not-null checks must be performed everywhere the code uses the dependency. One benefit of setter injection is that setter methods make objects of that class amenable to reconfiguration or re-injection later. Management through JMX MBeans is therefore a compelling use case for setter injection.
  因为使用构造器注入方式注入的组件 不可变 ,且保证了需要的依赖 不为 null 。此外,构造器注入的组件总是能够在 完全初始化的状态 返回给客户端(调用方);对于很多参数的构造器说明可能包含了太多了职责,违背了单一职责原则,表示代码应该重构来分离职责到合适的地方。 2. 构造器注入还是 Setter 注入?
  在对比 Setter 方法注入和 构造器注入的时候 分别引用的 Spring 官方文档的第二段阐述了除推荐方式的另一种方式的特点。
  在 Spring 3.x 的时候 Spring 推荐 Setter 方法注入,第二段表示:一些纯粹主义者喜欢基于构造函数的注入。提供所有对象依赖项意味着对象总是在完全初始化状态下返回给客户机(调用)代码。缺点是对象不太容易重新配置和重新注入。
  在 Spring 4.x 的时候 Spring 推荐构造器注入,第二段表示:Setter 注入应该主要用于可选的依赖项,这些依赖项可以在类中分配合理的默认值。否则,必须在代码使用依赖项的任何地方执行非空检查。setter 注入的一个好处是,setter 方法使该类的对象能够在以后重新配置或重新注入。
  Setter 注入 应该被用于可选依赖项。当没有提供它们时,类应该能够正常工作。在对象被实例化之后,依赖项可以在任何时候被更改。
  构造器注入 有利于强制依赖。通过在构造函数中提供依赖,您可以确保依赖对象在被构造时已准备好被使用。在构造函数中赋值的字段也可以是final的,这使得对象是完全不可变的,或者至少可以保护其必需的字段。
  构造器注入还可以避免  Field 注入 的循环依赖问题,比如 在 Alpha 中注入 Beta,又在 Beta 中注入 Alpha。如果使用构造器注入,在 Spring 启动的时候就会抛出 BeanCurrentlyInCreationException 提醒循环依赖。
  参考:
  https://docs.spring.io/spring-framework/docs/3.1.x/spring-framework-reference/html/beans.html#d0e2778
  https://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/beans.html#beans-constructor-injection
  https://www.vojtechruzicka.com/field-dependency-injection-considered-harmful/
  https://www.cnblogs.com/zhangshuaiyin/p/15035887.html

窗口期未过,新能源概念股跌势不止的原因找到了9月3日,新能源材料概念股高开低走,指数至收盘下跌约4。654。锂电与光伏两大核心板块无一幸免,其中宁德时代跌至486。5元,跌幅1。42赣锋锂业跌至180。33元,跌幅6。87捷为什么内行人买旗舰不愿买256G版本?原因有三个对于智能手机而言,手机内存越大越好,但是随着内存的增大,花费的钱也不再少数,这个时候究竟值不值得入手还是有待考虑的,在手机内存中,64G的内存显的力不足,往往聊聊微信,下载一些软件农村老太诊断出癌症后她笑了朋友妈七十岁老人诊断出癌症开心回家养老了。朋友陈常中年失业经济极度困难,老婆离异了,无孩。有一弟在广东江门打工,经济条件比我朋友好点,2015年陈常母亲身体不适,去市医院检查,不查从看不起年轻人想到音响圈的鄙视链社会上一个很不好的风气就是喜欢对自己不了解的东西指指点点,比如以前说80后独生子女是垮掉的一代,90后是自我的一代,现在矛头又指向了00后。我个人是不赞成这样的说法,一代人有一代人郭美美公布恋情在社交媒体上秀恩爱也一直在炫富7月6日,郭美美最近在社交平台上发布了一段视频,在这段视频中,她甜美地吻了男友,并公开宣布了一段新的关系。在视频里,29岁的郭美美梅和他的小男友甜蜜地吻了一下,把双腿放在男友的腿上现在开店做生意成本越来越高,是否引起新的垄断?现在随着房租,人工成本以及其它名目费用上涨,开店做生意变得越来越困难或可说门槛变得越来越高。十年前几万元就可开个店,现如今没有30w根本都不要想去开店,这个成本让相当一部分人想投资从联想公司上亿离谱年薪看联想为何急于上市从联想高管上亿的离谱年薪,就知联想为何急于上市。穷庙富方丈是上市公司最好套现方法,没有之一。柳传志退休年薪了年薪近亿元。柳传志在联想控股每年分红加退休金两项相加近1亿元。还有已退休人生道路如何选择?要问自己内心每个人都有自己的路要走,但如何去走,怎样走才是正确的?这要问我们自己的内心了。人的一生说长很长说短也很短,我相信每个人都是有自己的梦想的,比如小的时候老师会问你,长大了以后你想做什百元智能手表,10大运动模式,还能测量体温随着智能手表功能的增多,消费者越来越多的抛弃了传统手表,相比较而言一款性价比高功能多的智能手表会是多数人的选择。有数近日看到朋友买了一款刚上市的咕咚F4,颜值上看着深邃内涵,性价比多年后能为你省下一台小冰箱十款低能耗冰箱为减轻电费负担冰箱24小时持续运行,耗电量不可忽略。不妨选择节能冰箱,在变频系统加持下,低功耗运行,减轻电费负担。美的BCD592WKPZM(E)净味节能冰箱冰箱采用AST光循环净味科技,可有效节能环保还能省下大笔电费这十款一级能效冰箱入手绝对不吃亏冰箱全天不停歇运转,耗电量不容小觑,而一级能效冰箱在变频压缩机帮助下,可实现低功耗运行,节能又环保。美的BCD507WTPZM(E)净味一级能效冰箱冰箱搭载双变频系统,达到了一级能
听力损失多少的人需要戴助听器?你好听力损失多少的人需要戴助听器?听力损失在40分贝以上就应该选配助听器了。正常听力小于等于25分贝。您在日常生活中觉得听得不清楚就考虑。及时关注您的听力,到验配中心体验助听器的效NFT元宇宙是人们正在成为互联网上的所有者专家表示,NFT是元宇宙的关键。使用数字代币,人们正在成为互联网上的所有者,而不仅仅是租户。加密播客安德鲁斯坦沃尔德说,世界仍处于元宇宙的早期阶段。上周,社交媒体巨头FacebooC语言程序设计试题C语言程序设计试卷一单项选择题(每题1分,共20分)1。C语言规定在一个源程序中,main函数的位置()。A。必须在最开始B。必须在系统调用的库函数的后面C。可以任意D。必须在最后工作5年的程序员感慨finalfinallyfinalize面试这么卷?面试题finalfinallyfinalize的区别面试考察点考察目的了解求职者对Java基础的了解。考察范围工作13年的Java程序员。背景知识finalfinally在工作中几马斯克自荐要当狗狗币公司的挂名CEO,结果被提名为董事长本文来源于新浪财经狗狗币联合创始人比利马库斯周二发帖称假狗狗币公司的假CEO格雷格的任期已结束,我们需要一个新的假CEO来填补空缺。有什么好推荐吗?特斯拉CEO埃隆马斯克毛遂自荐,子女外出打拼,居家父母却被知名大厂割韭菜?酷派不能忍朋友,你知道2020年在国内市场最受欢迎的手机是哪一款吗?你绝对想不到,答案竟然会是OPPOA32!根据调研机构公布的数据,OPPOA32的手机激活量为904W,排名比iPhone新能源汽车制造,中国实现弯道超车比亚迪新车销售的火爆直接体现在公司月度销量快报上。11月3日晚,比亚迪发布的10月产销快报显示,新能源汽车销量达8。1万辆,同比增长249。作为一个缩影,中国新能源汽车制造正在加速买啥都行,就是不能剩!亚马逊CEO领养中国弃婴,每周给5万美金零花前言现在世界上到处都是娱乐新闻和一些花边新闻,富人在做什么似乎已经成为一个非常热门的话题,毕竟有钱人的生活到底啥样大家都很好奇。被称为真人版钢铁侠的ElonMusk就经常登上热搜,管理层更迭后,QQ音乐发布首个大版本更新记者崔鹏11月3日,QQ音乐11。0版本正式上线,这是年初腾讯音乐管理层更迭后,发布的首个重大版本更新,同时将产品slogan升级为听我想听。腾讯音乐方面表示,本次QQ音乐的改版聚用科技创新浪潮带动经济高质量发展盘和林中南财经政法大学数字经济研究院执行院长教授10月25日,2021年全国大众创业万众创新活动周(简称全国双创周)正式落下帷幕。双创周全面展现了各地大众创业万众创新不断取得的新进辛丑年随笔1105AppleWatch使用多年了,是从2代开始上手的。感觉其最大的用途是方便查看信息,自己不喜欢将手机放在身边,要使用就需要走几步过去拿,而有了AppleWatch,就极大地减少了手