У меня есть основной класс SpringBootApplication здесь:
package com.example.springproj;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
Класс @RestController здесь:
package com.example.springproj.controller;
@RestController
@Api("Sample")
public class RefDataController {
@Autowired
@Qualifier("RefDataServiceImpl")
private RefDataService refDataService;
@GetMapping(path = {"/refdata"}, produces = {"application/json"})
public ResponseEntity<Configuration> getRefData() {
// etc
}
}
Контроллер автоматически подключает этот интерфейс:
package com.example.springproj.service;
public interface RefDataService {
Configuration getConfiguration(String param);
}
Что реализовано этим классом:
package com.example.springproj.services;
@Service
public class RefDataServiceImpl implements RefDataService {
@Autowired
private ConfigRepository config;
@Value("${ENV}")
private String environment;
@Override
public Configuration getConfiguration(String param) {
// etc
}
}
Но когда я запускаю файл App.java, я получаю это
***************************
APPLICATION FAILED TO START
***************************
Description:
Field refDataService in com.citi.icrm.risk.springproj.controller.RefDataController required a bean of type 'com.citi.icrm.risk.springproj.service.RefDataService' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
- @org.springframework.beans.factory.annotation.Qualifier(value=RefDataServiceImpl)
Action:
Consider defining a bean of type 'com.citi.icrm.risk.springproj.service.RefDataService' in your configuration.
Я достаточно уверен, что эта автоматическая проводка должна работать, и я не уверен, как настроить этот компонент в загрузочном приложении Spring. Что я делаю не так?
РЕДАКТИРОВАТЬ: Вещи, которые я уже пробовал, включают:
Удаление всех аннотаций @Qualifier
@RestController
@Api("Sample")
public class RefDataController {
@Autowired
private RefDataServiceImpl refDataService;
@GetMapping(path = {"/refdata"}, produces = {"application/json"})
public ResponseEntity<Configuration> getRefData() {
System.err.println("testing.");
return new ResponseEntity<Configuration>(refDataService.getConfiguration("EEMS_USER_DETAIL_URL"), HttpStatus.OK);
}
}
public class RefDataServiceImpl implements RefDataService {
@Autowired
private ConfigRepository config;
@Value("${ENV}")
private String environment;
@Override
public Configuration getConfiguration(String param) {
try {
return config.getConfiguration(param, environment);
} catch (Exception e) {
e.printStackTrace();
throw (RuntimeException) new RuntimeException().initCause(e);
}
}
}
Изменение имен bean-компонентов в соответствии с соглашением
@RestController
@Api("Sample")
public class RefDataController {
@Autowired
@Qualifier("refDataServiceImpl")
private RefDataService refDataService;
@GetMapping(path = {"/refdata"}, produces = {"application/json"})
public ResponseEntity<Configuration> getRefData() {
System.err.println("testing.");
return new ResponseEntity<Configuration>(refDataService.getConfiguration("EEMS_USER_DETAIL_URL"), HttpStatus.OK);
}
}
@Service("refDataServiceImpl")
public class RefDataServiceImpl implements RefDataService {
@Autowired
private ConfigRepository config;
@Value("${ENV}")
private String environment;
@Override
public Configuration getConfiguration(String param) {
try {
return config.getConfiguration(param, environment);
} catch (Exception e) {
e.printStackTrace();
throw (RuntimeException) new RuntimeException().initCause(e);
}
}
}
Для справки, файлы попадают в структуру пакета приложения следующим образом:
com.example.springproj
-> com.example.springproj.controller
--> RefDataController
-> com.example.springproj.services
--> RefDataService
-> com.exampple.springproj.services.impl
---> RefDataServiceImpl
Вот структура папок, так как некоторые люди спрашивали:
RefDataServiceImpl
в квалификаторе меняется наrefDataServiceImpl
- person Deadpool   schedule 10.12.2019