我有一个称为UserRepository的通用存储库接口。 然后,我有了一个扩展自MyUserRepository的接口。 它处理扩展User的MyUser类。
我还有一个名为UserService的服务接口和一个名为MyUserServiceImpl的类。
该服务需要UserRepository的实例,尽管我可以使用@Qualifier之类的注释,但是它不起作用。
@NoRepositoryBean
public interface UserRepository <T extends User> extends JpaRepository<T, Long>{
<S extends T> S findByLoginName(String loginName);
<S extends T> S saveAndFlush(User user);
}
@Repository
@Qualifier("myUserRepository")
public interface MyUserRepository extends UserRepository<MyUser> {
}
public interface UserService {
public List<User> getUsers();
}
@Service
public class MyUserServiceImpl implements UserService {
@Autowired
@Qualifier("myUserRepository")
private UserRepository<User> userRepository;
@Override
public List<User> getUsers() {
....
}
}
申请无法开始
说明:
com .... services.MyUserServiceImpl中的构造函数的参数0 需要类型为'com .... repositories.UserRepository'的bean 找不到。
注入点具有以下注释: -@ org.springframework.beans.factory.annotation.Autowired(required = true)
操作:
考虑定义类型为'com .... repositories.UserRepository'的bean 在您的配置中。
答案 0 :(得分:1)
@Qualifier
注释仅在调用已创建的bean时使用。因此,您不应调用类头,可以将其命名为@Repository("myUserRepository")
,然后在@Autowired
@Qualifier("myUserRepository")
答案 1 :(得分:0)
您的案件不需要限定词。
@Repository
public interface MyUserRepository extends UserRepository<MyUser> {
}
将存储库自动连线为:
@Service
public class MyUserServiceImpl implements UserService {
@Autowired
private UserRepository<User> userRepository;
...
答案 2 :(得分:0)
@Qualifier与@Autowired注释一起使用。默认情况下,@ Autowired将根据类型注入bean。当您具有多个相同类型的bean时,@ Qualifier可以帮助解决冲突。在您的情况下,使用批注@Repository可以完成工作。同样在UserRepository界面中,您还必须提供Id类以及JPA实体类。