如何解决只调用一次抽象类构造函数,而不是在每个特定类中
我有这样的事情:
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 举报,一经查实,本站将立刻删除。