【问题标题】:Repository autowired returning null存储库自动装配返回 null
【发布时间】:2019-11-20 08:40:08
【问题描述】:

我想在后端使用 Spring boot 并在前端使用 Swing 来制作应用程序。我需要在我的服务类上使用自动装配的存储库,当我需要实例化服务类时如何制作它?

我已经尝试将存储库更改为 BeanFactory,尝试更改文件的位置但我无法逃脱!我需要实例化 Service 类,而 autowired 不适用于此。

我有一个名为 Permission 的模型。 存储库(PermissionRepository.java):

@Repository
public interface PermissionRepository extends JpaRepository<Permission, Long>{
    Optional<Permission> findByDescription(String description);    
}

服务(PermissionService.java):

@Autowired
BeanFactory beanFactory;

public List<Permission> loadAll() {
 return this.beanFactory.getBean(PermissionRepository.class).findAll();
}

使用(BasicOperations.java):

public static void initialPermission() {
 try {
    if (new PermissionService().loadAll().isEmpty()) {
    //logics
    }
  } catch(Exception e) {
    ...
  }
}  

我希望有一个列表 java.util.List 但错误是我的自动装配存储库上的 nullPointer 堆栈:

线程“AWT-EventQueue-0”中的异常 java.lang.NullPointerException 在 com.riTrap.service.PermissionService.loadAll(PermissionService.java:20)

【问题讨论】:

  • 你正在创建一个new PermissionService(),你应该在BasicOperationsAutowire你的服务(最好使用构造函数注入)
  • 对,我已经这样做了,但是同样的事情发生了。 code public static void initialPermission() { try { if (permissionService.loadAll().isEmpty()) { code 添加在顶部 code @Autowired static PermissionService permissionService; code 需要是静态的,因为方法是静态的。即使这不是静态的,我也应该需要启动 BasicOperations,这样也不会工作。

标签: spring-data-jpa repository autowired


【解决方案1】:

您应该使用 autowired 而不是 new PermissionService。您使用 loadAll 来检查数据库是否包含元素。如果数据库很大,这种方法可能会损坏您的应用程序。建议:改用count

@Service
public class PermissionService {

    @Autowired
    PermissionRepository permissionRepository;

    public List<Permission> loadAll() {
        return permissionRepository.findAll();
    }

    public boolean isEmpty() {
        return permissionRepository.count() == 0L;
    }
}

如果需要在使用前初始化bean,可以使用构造函数:

@Service
public class BasicOperations {

    @Autowired
    public BasicOperations(PermissionService permissionService){
        if(permissionService.isEmpty()){
            //DO STUFF
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    相关资源
    最近更新 更多