如何在 Spring Boot 中使用 @autowire
注解添加新的重载构造函数?
已公开的类的当前状态
@Component
public class PersonDetails {
private Address address;
@Autowired
public PersonDetails(Address address) {
this.address = address;
}
public void printDetails() {
System.out.println(address.toString() + " " + bankAccount.toString());
}
}
现在应该像这样添加银行帐户详细信息
@Component
public class PersonDetails {
private Address address;
private BankAccount bankAccount;
@Autowired
public PersonDetails(Address address) {
this.address = address;
}
@Autowired
public PersonDetails(Address address, BankAccount bankAccount) {
System.out.println("Another constructor where required is true by default");
this.address = address;
this.bankAccount = bankAccount;
}
public void printDetails() {
System.out.println(address.toString() + " " + bankAccount.toString());
}
}
问题是 spring 不允许重载构造函数 @autowire
注解。
如何在具有向后兼容性的 Spring Boot 项目中添加带有 @autowire
注解(或任何其他方式)的重载构造函数?
可以使用字段级 @autowire
注解来完成(希望这是一个更好的方法,因为在 Spring Boot 中不推荐使用字段级 @autowire
注解),除非没有更好的方法。
最佳答案
根据 Spring 的规定,如果 Spring 不明确应该使用哪个构造函数,则您应该只使用 @Autowired
构造函数。
Spring将使用可以与Spring bean匹配的最多参数的构造函数。如果有两个参数大小相同且可以匹配的构造函数,Spring 需要 @Autowired
。
关于向后兼容性:
只需删除两个 @Autowired
注释即可。
如果已弃用的应用程序使用您的 PersonDetails
类,它将使用 1st
构造函数,因为只能注入(inject)一个 Bean。
如果最新的应用程序使用您的 PersonDetails
类,它将使用 2nd
构造函数,因为它将能够注入(inject)两个 bean。
总体了解一下 Spring 框架:Constructor-based Dependency Injection
关于java - Spring Boot中使用@autowire注解重载构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59361381/