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

fcg9iug3  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(374)

我有这样的想法:

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一次。我不是在使用springboot,它会让我的生活更容易使用@autowired注解。你知道吗?谢谢

55ooxyrt

55ooxyrt1#

我不想将itemrepository作为每个特定处理程序的参数传递,因为它总是itemrepository的同一个示例。
虽然这不是干的(不要重复你自己),你做的是正确的方式。
理想情况下,类的依赖关系应该在对象示例化时或不适合通过setter设置时设置。
为了实现这一点,子类必须声明 itemRepository 作为构造函数的参数,最坏情况下作为setter。
不管有没有Spring Boot,你都会遇到同样的“问题”(事实上这不是问题)。
我不推荐的一个简单的干燥方法是“隐藏”这对夫妇 itemRepository 抽象类中的依赖关系:

public abstract class Handler {

    protected ItemRepository itemRepository;

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

但作为一个副作用,您得到了一个自 itemRepository 不是可见的依赖项。

相关问题