微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

只调用一次抽象类构造函数,而不是在每个特定类中

如何解决只调用一次抽象类构造函数,而不是在每个特定类中

我有这样的事情:

public abstract class Handler {

    protected ItemRepository itemRepository;

    public Handler(ItemRepository itemRepository) {
        this.itemRepository = itemRepository;
    }
}

public class SpecificHandler1 extends Handler {    

    public SpecificHandler1(ItemRepository itemRepository) {
        super(itemRepository);
    }
}

public class SpecificHandler2 extends Handler {    

    public SpecificHandler2(ItemRepository itemRepository) {
        super(itemRepository);
    }
}

我不想将 ItemRepository 作为每个特定处理程序的参数传递,因为它始终是 itemRepository 的相同实例。我只想传递 ItemRepository 一次。我不使用 Spring boot,这将使我的生活更轻松,使用 @Autowired 注释。任何想法?谢谢

解决方法

我不想将 ItemRepository 作为参数传递给每个特定的 处理程序,因为它始终是 itemRepository 的同一个实例。

虽然这不是 DRY(不要重复自己),但你做的是正确的方法。
理想情况下,应该在对象被实例化或不适合通过 setter 时设置类的依赖关系。
为了实现这一点,子类必须将 itemRepository 声明为构造函数的参数,或者最坏的情况是声明为 setter。
无论是否使用 Spring Boot,您都会遇到相同的“问题”(实际上这不是问题)。

我不推荐的一种简单的 DRY(除其他外)方法是在抽象类中“隐藏”/强耦合 itemRepository 依赖项:

public abstract class Handler {

    protected ItemRepository itemRepository;

    public Handler() {
        this.itemRepository = new ItemRepository();
    }
}

但作为副作用,您会得到一个不可单元测试的类,因为 itemRepository 不是可见的依赖项。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。