gpt4 book ai didi

java - Spring Boot中使用@autowire注解重载构造函数

转载 作者:行者123 更新时间:2023-12-01 19:20:35 35 4
gpt4 key购买 nike

如何在 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

特别是:Spring Beans and Dependency Injection

关于java - Spring Boot中使用@autowire注解重载构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59361381/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com