首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在spring boot中使用@autowire注解重载构造函数

在spring boot中使用@autowire注解重载构造函数
EN

Stack Overflow用户
提问于 2019-12-17 01:16:17
回答 1查看 625关注 0票数 0

如何使用@autowire注解在spring boot中添加新的重载构造函数?

已公开的类的当前状态

代码语言:javascript
复制
@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());
    }
}

现在应该像这样添加BankAccount详细信息

代码语言:javascript
复制
@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注释)。

EN

回答 1

Stack Overflow用户

发布于 2019-12-17 01:27:25

根据Spring的说法,只有在对Spring不明显的情况下才应该使用@Autowired构造函数,它应该使用哪个构造函数。

Spring将使用具有最多参数的构造函数,这些参数可以与Spring bean匹配。如果有两个参数大小相等的构造函数可以匹配,那么Spring需要@Autowired

关于向后兼容性

只需删除这两个@Autowired注释即可。

如果弃用的应用程序使用您的PersonDetails类,它将使用1st构造函数,因为只能注入一个bean。

如果最新的应用程序使用您的PersonDetails类,它将使用2nd构造函数,因为它将能够同时注入这两个bean。

总体上看一下Spring Framework:Constructor-based Dependency Injection

尤其是:Spring Beans and Dependency Injection

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59361381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档