为什么人们使用 @Autowired 进行构造函数注入

Why people uses @Autowired for constructor injection

我看到很多人在构造函数中使用 @Autowired 注释来注入依赖项,如下所示

@Service
public class Employee {

 private EmployeeService employeeService;
 
 @Autowired
 public Employee(EmployeeService employeeService) {
   this.employeeService = employeeService;
 }
 :
 :
}

据我所知,如今 Spring 是如此先进,Spring constructor/setter DI 即使没有 @Autowired 也能正常工作,如下所示

@Service
public class Employee {

 private EmployeeService employeeService;

 public Employee(EmployeeService employeeService) {
   this.employeeService = employeeService;
 }
 :
 :
}

想知道为什么人们用 @Autowired 注释来注释构造函数以注入依赖项。

谁能帮我解决这个问题

没有技术理由这样做(除非您有多个构造函数等)。最可能的原因是,人们已经学会了使用它,当 Spring 不支持构造函数的自动检测并且仍然有必要时,俗话说,旧习难改。此外,如果您搜索任何示例,您仍然会找到很多教程,其中使用了注释,这是另一个原因。它与 Spring 数据接口上的 @Repository 注释相同。那里的注释完全错误,但是这个网站上有很多问题,人们在他们的代码中添加了这个。

是的,您是对的 - 您不需要对 DI 使用注解 @Autowired 构造函数。 我认为有几个原因:

  • 开发者不知道不需要
  • 开发者使用注解强调它是 DI
  • 程序员不信任 Spring 并希望确保 DI 工作
  • 应用程序是用较低版本 Spring 编写并升级到更新版本 - 注释是它的产物

就我个人而言,我使用 @Autowired 注解只是为了增强代码的可读性,以便其他开发人员可以更轻松地阅读和理解代码。