这就是我所拥有的。我试图自动装配JpaRepository,以便我可以通用的方式访问它。
public interface Enabler<T, R> {
@Autowired
R repository;
default ServiceEnabler<T> getEnabler(){
return new ServiceEnabler<>(repository);
}
}
public class User implements Enabler<User, UserRepository>, Serializeable {
private static final long serialVersionUID = -5454763392593161707L;
Long id;
String name;
}
@Repository
public UserRepository extends JpaRepository<User, Long> {
List<User> findByName();
}
@Service
public GenericService<T extends Enabler<T, R>,
R extends JpaRepository<T, Long>> {
List<T> getAll(T generic){
ServiceEnabler<T> enabler = generic.getEnabler();
return enabler.getRepo().findAll();
}
}
无论如何这是可能的吗?
答案 0 :(得分:2)
&#34;接口的目的&#34;在Java中是为实现接口的所有类定义一个契约; &#34;接口&#34;在Java中不能有任何状态,你只能拥有运行时常量或方法。
现在,由于接口不能具有任何状态,因此您无法创建像R repository;
这样的实例变量。
现在来到@Autowired
注释,你也做不到,因为这个注释的目的是注入一个对象,就像我之前说过的那样,因为Java接口不能有一个状态所以没有注入的问题对象
所以,总的答案是你不能做你想做的事情,而@Autowired R repository;
会导致编译错误。