Я создал новую аннотацию, которая поможет мне позже внедрить ее как bean-компонент.
Пример:
Код: Выделить всё
@Retention(RetentionPolicy.RUNTIME)
public @interface ServiceApplication {
}
Код: Выделить всё
@SpringBootApplication
@ComponentScan(basePackages = {"com.mypackage"}, includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {
ServiceApplication.class})})
@Import(PersonDetailsGrpc.class)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Код: Выделить всё
@ServiceApplication
@RequiredArgsConstructor
public class PersonManagementInputPort implements PersonManagementUseCase {
private final PersonManagementOutputPort managementOutputPort;
@Override
public PersonDO complementData(PersonDO personDO) {
return managementOutputPort.save(personDO);
}
}
Код: Выделить всё
@GrpcService
@RequiredArgsConstructor
public class PersonDetailsGrpc extends PersonServiceImplBase {
private static final Logger log = LoggerFactory.getLogger(PersonDetailsGrpc.class);
private final PersonManagementUseCase useCase;
private final PersonMapper personMapper;
@Override
public void calculateAge(PersonDetailsRequest request,
StreamObserver
responseObserver) {
log.info("request received: {}", request);
PersonDO personDO = personMapper.fromRequestToModel(request);
PersonDetailsResponse detailsResponse = personMapper.fromModelToResponse(useCase.complementData(personDO));
log.info("response generated: {}", detailsResponse);
responseObserver.onNext(detailsResponse);
responseObserver.onCompleted();
}
}
Код: Выделить всё
public interface PersonManagementUseCase {
PersonDO complementData(PersonDO personDO);
}
Код: Выделить всё
@Primary
@MapperConfig(
componentModel = "spring",
unmappedSourcePolicy = ReportingPolicy.IGNORE,
unmappedTargetPolicy = ReportingPolicy.IGNORE,
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE
)
public interface MappingConfig {
}
Код: Выделить всё
public interface GenericMapper{
M fromRequestToModel(Req request);
Res fromModelToResponse(M model);
E fromModelToEntity(M model);
M fromEntityToModel(E entity);
}
Код: Выделить всё
@Mapper(config = MappingConfig.class)
public interface PersonMapper extends GenericMapper
{
}
Код: Выделить всё
Parameter 0 of constructor in mx.com.liverpool.framework.input.grpc.PersonDetailsGrpc required a bean of type 'com.mypackage.application.usecases.PersonManagementUseCase' that could not be found.
Это структура моего проекта

Мои ServiceApplication, PersonManagementInputPort, PersonManagementUseCase находятся в модуле приложенияМое основное приложение находится в модуле начальной загрузки
Мое PersonDetailsGrpc находится в модуле фреймворка
Подробнее здесь: https://stackoverflow.com/questions/785 ... -find-bean
Мобильная версия