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

标签 java spring spring-boot

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

相关文章:

spring-boot - Spring Boot 使用 Hikari 连接池

java - HashMap内存分配不明确

java - 听取偏好变化

java - 使用 appengine-maven-plugin 在 Eclipse 中的本地 DevAppServer 上使用 GAE HTTPS

java - tomcat不支持major.minor版本52.0

java - spring.config.additional-location 不适用于绝对/相对父目录

java - 以编程方式将 id 分配给 EditText

java - 引用的延迟加载

java - JPA+Hibernate+@Transactional注解的spring事务支持的奇怪行为

java - 如何通过读取 JSON 来修复 UnrecognizedPropertyException?