当前位置: 首页 > 知识库问答 >
问题:

@主JpaRepository未用于@autowired

郜昊苍
2023-03-14

我有一个接口

public interface UserService {
    List<User> findAll();
}

有两个实现

@Component
public class SimpleUserService implements UserService {
    private List<User> users = Arrays.asList(new User());

    @Override
    public List<User> findAll() {
        return Collections.unmodifiableList(users);
    }
}

而且

@Repository
@Primary
public interface UserRepository extends JpaRepository<User, Integer>, UserService {
}
@RestController
public class SimpleUserController implements UserController {
    @Autowired
    private UserService userService;

    @Override
    @GetMapping("/users")
    public List<User> getAllUsers() {
        return userService.userResources;
    }
}

另外一个问题是,如何创建两个配置,其中一个使用简单服务,另一个使用存储库?我不能在配置中的@bean注释方法中实例化存储库。我会将@autowired添加到配置的私有成员中并返回它,但由于与上面相同的原因,这将不起作用。

共有1个答案

林绪
2023-03-14

对于Spring数据接口,既不需要@component也不需要@repository。存储库是由不同的Spring数据机制检测的,而不是来自Spring本身的常规组件扫描。这也是@primary注释没有任何效果的原因。

解决方案可能如下所示:

public interface UserService {}

@Component
public class SimpleUserService implements UserService {}

@Component
public class JpaUserService implements UserService {

    @Autowired
    UserRepository userRepository
}

public interface UserRepository extends JpaRepository<User, Integer> {}

那么您就可以在使用Spring数据存储库的存储库层和使用存储库层的服务层之间实现清晰的分离。您也没有混合常规的Spring bean注释和Spring数据存储库接口,这也会简化您的工作。

 类似资料:
  • 我正在处理一个简单的Springendpoint。我当前的db表sql是: 我的实体包含: 当调用存储库的保存方法时,我得到了错误: 日志的第一行是实体的toString。

  • 我正在尝试创建jpa存储库,但外键主键存在问题。虽然它是在抽象基类(

  • 配置类: 消费阶层:

  • 我在一个名为seedrecord的对象和一个名为FielliateLink的对象之间有一个manytomany关系。为了删除FielliateLink,我需要首先从每个SeedRecord的FielliateList中删除对它的引用。之后,我使用spring JParepository的delete方法删除对象。因为我的服务(FiniliateLinkService)中有不同的删除方法,所以我决定

  • 问题内容: 我有一个简单的Entitly类,(和单独类中的字段)。然后,我使用Spring Data()访问数据库(MySql),使用常规ID,查询可以正常工作,无论是Spring生成的查询还是我自己编写的查询。与我没有设法创建正确的查询。我想做的是选择所有id(发生某些情况的EmbeddedId字段之一),这里有一些代码示例,也许有人会知道如何解决它。 实体类: EmbeddedId类: 和存储

  • 这是我的代码: user.java UserController.java 结构: 提前谢谢