Я использую хранилище 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;
}
// The doSomething method is being called from a constructor
public Order(List<Item> listOfItems) {
// Initialize ArrayLists
order = new ArrayList<>();
results = new ArrayList<>();
possibleResults = new ArrayList<>();
Accepted = new HashMap<>();
doSomething();
// Soft copy order
order.addAll(listOfItems);
}
@Transactional
public void doSomething() {
List<Setting> settingList = service.findAll();
// Manipulate Data
}
}
проблема, с которой я сталкиваюсь, заключается в том, что внедрение службы возвращает ноль, я запустил приложение в режиме отладки и установил точку останова, где я вызываю findAll, он вызывает исключение nullPointerException, службу не был введен.
Я также попытался автоматически подключить репозиторий прямо в мой конфигурационный класс вместо службы, но те же результаты nullPointerException
PS: та же конфигурация с той же инъекцией службы, кажется, прекрасно работает в одном из мои контроллеры, сервис успешно подключен, но он не работает с моим @Component. Также пытался использовать @Service, @Transactiona, но результаты те же.
- Spring boot Version 2.2.4.RELEASE
- Mongodb: 3.11.2
РЕДАКТИРОВАТЬ: Также пытался автоматически подключить хранилище, как это:
@Repository
public interface SettingRepository extends MongoRepository<Setting, String> {
}
Мой класс компонентов
// tried it with @Component as well
@Service
@Transactional
public class Config {
private SettingRepository SettingRepository;
@Autowired
public Config(SettingRepository SettingRepository) {
this.SettingRepository = SettingRepository;
}
public Config() {
}
public Config(List<Item> listOfItems) {
// Initialize ArrayLists
order = new ArrayList<>();
possibleConfigurations = new ArrayList<>();
acceptedConfigurations = new ArrayList<>();
mapOfAcceptedConfigurations = new HashMap<>();
doSomething();
// Soft copy order
order.addAll(listOfItems);
}
public void doSomething() {
List<Setting> settingList = SettingRepository.findAll();
Level securityLevel = settingList.get(0).getSecurityLevel();
Level fragileAndHeavyLevel =settingList.get(0).getLevelFragileItem();
}
это произвело то же самое, мне интересно, если иметь несколько конструкторы могут привести к тому, что автопроводка будет нулевой. Я автоматически подключаю только один конструктор, который вводит репо