当前位置: 首页 > 网络应用技术

为什么不推荐@Autowired注释?

时间:2023-03-05 18:34:07 网络应用技术

  在实际工作中,使用开发时,许多代码朋友喜欢使用注释进行依赖注射。目前,想法将报告黄色警告。一件代码,我不允许在这里发出如此未知的警告。专业人士,您为什么要提示这样的警告?因此,我的清洁度和好奇心,我开始研究此警告。

  让我们简单地翻译自动提示的含义:

  不建议直接注入现场。开发团队的建议:始终使用构造函数依靠中国注射的依赖。

  在上面的问题上,我们低头看

  基于属性(已提交)的这种注入方法是将bean变量上的注释用于依赖注入。本质上,它通过反射直接注入现场。这是我通常看到的最熟悉的方式。例如:例如:

  基于通过相应变量方法的设定方法注入,并在方法上使用注释来完成依赖项注入。例如:

  注意:在春季4.5及更高版本中,可以在不写作的情况下编写@Autow的注释。

  基于构造函数注入,所有必要的依赖项都放在带有注释构造器的参数中,并且在构造函数中完成了相应变量的初始化。该方法基于构造函数的注入。例如:

  如您所见,变量的方式非常简单。但实际上他有一些问题。具体问题如下:

  问题一

  汇编过程不会报告错误,但是在运行后报告

  初始化类时,Java是静态变量或静态语句块的顺序 - >实例变量或初始化的句子块 - > @Autowired订单。值仍然为零。

  问题2无法有效地表明依赖性。我认为许多人遇到了一个错误。依赖对象为null。启动依赖容器时,问题是依赖注入的注射较少。该方法过于取决于注入容器。当未启动整个依赖容器时,该类将无法操作。反射后,它无法提供此类所需的依赖关系。

  问题的核心思想之一三个依赖关系是,由容器管理的类不应取决于由容器管理的依赖性。在白话的情况下,如果此类使用依赖项注入的类,则该类必须摆脱这些依赖项必须是依赖性的。它也可以正常运行。但是,注入变量的方法无法保证这一点。

  我们通常在开发属性时使用这三个注释。这三个注释在春季也得到了支持。LLES看看这三个注释之间有什么区别?

  @Autowired为弹簧框架提供的注释可以理解为春季的Pro -Son。

  测试方法

  这是匹配bean的过程:

  @Inject在春季的环境中,@inject和@Autowired是相同的,因为它们的依赖性注入由此后处理器处理。

  这两个之间的差异是第一个@inject在Java EE袋中,需要在SE环境中分别引入。另一个区别是,@Autowired可以设置必需= false,并且@injection @injects没有此属性。那是春天的儿子。

  @resource @resource是JSR-250定义的注释。Spring在包括@Resource在内的CommonAntantationBeanPostProcessor中实现了JSR-2050的处理。

  这具有2个属性,并且Bean的名称是在弹簧中定义的,即Bean的类型。如果添加了@Resource注释的属性,那么他的注射过程是:

  因此,我们可以使用@Resource @Autowired,当然,您也可以使用@requredargsconstructor constructor方法。该表格由Spring推荐的构造方法注入。该方法是伦波克(Lombok)下的注释。