首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有服务注入的spring chaining构造函数

具有服务注入的spring chaining构造函数
EN

Stack Overflow用户
提问于 2015-06-03 12:46:40
回答 1查看 389关注 0票数 0

我有一节课,就像这样

代码语言:javascript
复制
public class testClass {
    private TestService testService;

    public testClass() {
        this(testService);
    }

    @Autowired(required = true)
    public testClass(TestService testService) {
        this.testService = testService;
    }
}

默认的无参数构造函数是强制的,因为我有一个结构化的工厂设计,我从那里调用我的无参数构造函数,所以我不想改变这个结构。所以我用chaining constructordefault constructor调用argumented constructor。但是java抛出了异常

cannot reference testService before supertype constructor has been called

我可以通过将testService作为static来解决这个异常,但是从here中,我认为使用静态注入并不总是一个好主意。

有没有人可以给我一些设计方案的建议,告诉我如何在没有静态注入的情况下从default constructor中解决或调用这个argumented constructor

EN

回答 1

Stack Overflow用户

发布于 2015-06-03 13:03:56

您有两个选择:

现场注入

向该字段添加一个@Autowired注释,并丢弃带参数的构造函数。

Spring将使用反射注入依赖项。如果与示例中一样,后面的默认构造函数是空的,并且是唯一的构造函数,那么您也可以丢弃它,因为java编译器会为您创建它。

优点:简短的代码

构造函数注入丢弃了无参数的构造函数。Spring将很好地提供依赖关系。

优点:你的代码在没有Spring的情况下工作得很好,这很棒,还有其他一些测试方面的东西。Here is a more detailed explanation why I prefer this variation

一些额外的评论:

  • 总是以首字母大写命名类。其他的一切都会让你的代码读起来很混乱,因为developers.
  • You根本就没有工厂。在Spring中使用工厂的方法有很多种,如果你感兴趣,可以查一下。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30611039

复制
相关文章

相似问题

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