gpt4 book ai didi

java - 基于子类的抽象类中的@Inject

转载 作者:行者123 更新时间:2023-12-02 06:03:15 25 4
gpt4 key购买 nike

假设我每个实体都有一个用于数据库访问的存储库类(spring data jpa)和一个服务类。依赖关系由 spring 框架管理。每个服务方法在大多数情况下都是相同的,因此主要是代码重复:

public class NewsService {
@Inject
private NewsRepository newsRepository;

public void add(News news) {
// do some validation
newsRepository.save(news);
}
}

public class UserService {
@Inject
private UserRepository userRepository;

public void add(User user) {
// do some validation
userRepository.save(user);
}
}

现在我考虑创建一个像这样的抽象类:

public abstract class AbstractService<T> {
private UnknownRepository unknownRepository;

public void add(T entity) {
// do some validation
unknownRepository.save(entity);
}
}

public class NewsService extends AbstractService<News> {

}

public class UserService extends AbstractService<User> {

}

我的问题:如何根据我的实体覆盖抽象类中使用的存储库?

最佳答案

您可以用抽象方法和类型参数替换 UnknownRepository 字段:

// R is the type of the repository
public abstract class AbstractService<T,R extends BaseRepository> {
protected abstract R getRepository();

public void add(T entity) {
getRepository().save(entity);
}
}

并将特定存储库注入(inject)到此类的实现中:

public class NewsService extends AbstractService<News, NewsRepository> {
@Inject private NewsRepository newsRepository;

@Override
public NewsRepository getRepository() {
return newsRepository;
}

// the inherited add() method works now
}

关于java - 基于子类的抽象类中的@Inject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22507041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com