JHipster:如何在UserService中引入UserExtraRepository及搜索仓储?
关于在JHipster中注入自定义Repository的解决方案
嘿,我来帮你一步步搞定这个问题,完全贴合JHipster的开发习惯:
一、如何将userExtraRepository注入到UserService和registerUser()方法中?
没错,你想的方向完全正确!JHipster(以及Spring官方)非常推荐用构造函数注入的方式来处理依赖注入,具体步骤如下:
在
UserService中声明Repository成员变量
首先在UserService类里添加一个private final修饰的UserExtraRepository成员,确保它不可变且线程安全:private final UserRepository userRepository; private final UserExtraRepository userExtraRepository; // 新增自定义Repository通过构造函数完成依赖注入
修改UserService的构造函数,把UserExtraRepository作为参数传入,Spring会自动识别并完成注入:public UserService(UserRepository userRepository, UserExtraRepository userExtraRepository) { this.userRepository = userRepository; this.userExtraRepository = userExtraRepository; // 初始化成员变量 }在
registerUser()方法中直接使用
现在你可以在registerUser()方法里直接调用userExtraRepository的方法了,比如保存用户的额外信息:public User registerUser(UserDTO userDTO, String password) { // 原有用户注册逻辑(比如构建User对象、加密密码等) User user = // 完成User对象的构建与保存 // 处理用户额外信息 UserExtra userExtra = new UserExtra(); userExtra.setUser(user); userExtra.setXXX(userDTO.getXXX()); // 设置自定义字段 userExtraRepository.save(userExtra); // 使用注入的Repository保存 return user; }
二、userExtraSearchRepository的注入方式是否相同?
完全一致!因为userExtraSearchRepository是JHipster生成的搜索型Repository(比如Elasticsearch/Solr实现),本质上也是Spring管理的Bean,所以注入逻辑和普通JPA Repository没有区别:
在需要使用它的类(比如
UserService)中声明成员变量:private final UserExtraSearchRepository userExtraSearchRepository;添加到构造函数参数中完成注入:
public UserService(UserRepository userRepository, UserExtraRepository userExtraRepository, UserExtraSearchRepository userExtraSearchRepository) { this.userRepository = userRepository; this.userExtraRepository = userExtraRepository; this.userExtraSearchRepository = userExtraSearchRepository; }
之后你就可以在方法里正常用它做搜索相关的操作啦。
内容的提问来源于stack exchange,提问作者Jochen Haßfurter
相关产品推荐
相关产品推荐

