自动装配和在 Spring Boot 的自动装配类上使用 new 关键字的区别?

Ris*_*hra 3 java spring autowired spring-annotations spring-boot

@Autowired
private EmployeeService employeeService;
Run Code Online (Sandbox Code Playgroud)

对比

@Autowired
private EmployeeService employeeService = new EmployeeService();
Run Code Online (Sandbox Code Playgroud)

使用new EmployeeService()上比只使用自动装配类不同new EmployeeService()

Mil*_*lgo 6

如果@Autowired注入了一个 bean,它将覆盖您创建的对象。但是,如果没有创建 bean,您将有一个回退(在这种情况下new EmployeeService()。这可能对测试有所帮助,但它是一种反模式,因为通常您只想要两种行为中的一种。

  • 我认为这也是测试的反模式。即使在测试中,您也想确切地知道在哪里注入了什么,这样的语句会掩盖代码。 (4认同)