@@ Autowired不会注入Mongodb存储库或服务-nullPointerException-

问题描述 投票:0回答:1

我正在使用连接在服务中的mongodb存储库,我想将其连接到另一个组件中,以便可以使用findAll。

@Service
@Transactional
public class SettingService implements SettingInterface {

  public SettingService() {
  }

  private SettingRepository settingRepository;

  @Autowired
  public SettingService(SettingRepository settingRepository) {
    this.settingRepository = settingRepository;
  }

  @Override
  public List<Setting> findAll() {
    return settingRepository.findAll();
  }
}

存储库

public interface SettingRepository extends MongoRepository<Setting, String> {
}

我想在其中注入数据的类

@Component
public class Config {

    private  SettingService service;

    public Config() {
    }

    @Autowired
    public Config(SettingService service) {
        this.service = service;
    }


    public Config(List<Item> listOfItems) {
        // Another constructor to Initialize some ArrayLists

    }

    @Transactional
    public void doSomething() {
        List<Setting> settingList = service.findAll();
        // Manipulate Data


  }
}

我遇到的问题是服务注入返回null,我在调试模式下运行了应用程序,并在我调用findAll的地方放置了一个断点,它抛出nullPointerException,未注入服务。

我还尝试将存储库直接自动连接到配置类而不是服务中,但结果相同nullPointerException

PS:具有相同服务注入的相同配置似乎可以在我的一个控制器中正常工作,服务已成功连接,但不适用于我的@Component。也尝试使用@ Service,@ Transactiona,但结果相同。

  • Spring boot版本2.2.4.RELEASE
  • Mongodb:3.11.2
java spring mongodb nullpointerexception autowired
1个回答
1
投票

我们可以在整个应用程序中使用@Component将Bean标记为Spring的托管组件。 Spring仅使用@Component拾取并注册bean,通常不会寻找@Service和@Repository。

因此,如果未指定组件扫描顺序,则无法自动装配@Service和@Repository在组件中。

如果要自动装配并在存储库类上使用@Repository,请使用@Configuration而不是@Component。

© www.soinside.com 2019 - 2024. All rights reserved.