Я очень новичок в Micronauts, и у меня достаточно опыта разработки приложений для весенней загрузки. На этом фоне я наткнулся на создание пользовательских bean-компонентов, например, как я использовал для создания аннотаций @Bean
в приложениях Spring. В моем случае у меня есть библиотека, которая предоставляет интерфейс и его класс реализации. Я хотел использовать интерфейс в своем коде и попытаться внедрить реализацию, и она перестала работать с ошибкой ниже
Caused by: io.micronaut.context.exceptions.NoSuchBeanException: No bean of type [io.vpv.saml.metadata.service.MetaDataParser] exists for the given qualifier: @Named('MetaDataParserImpl'). Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
Вот мой код
@Singleton
public class ParseMetadataImpl implements ParseMetadata {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Inject
@Named("MetaDataParserImpl")
private MetaDataParser metaDataParser;
@Override
public IDPMetaData getIDPMetaData(URL url) throws IOException {
logger.info("Parsing {}", url);
logger.info("metaDataParser {}", metaDataParser);
return metaDataParser.parseIDPMetaData(url);
}
}
Я уверен, что что-то не так Я делаю и должен понимать, что делать. У меня это работает, добавляя приведенный ниже код и удаляя аннотации вокруг metaDataParser
.
@PostConstruct
public void initialize() {
//Want to Avoid This stuff
this.metaDataParser = new MetaDataParserImpl();
}
Используя Spring Boot, можно было бы добавить аннотацию @Bean
для создания некоторых пользовательских bean-компонентов, которые мы можем сделать @Autowired
внедрить его везде в нашем приложении. Есть ли на Микронавтах эквивалент, которого мне не хватает? Я просмотрел руководство по https://docs.micronaut.io/2.0.0.M3/guide/index.html и не смог ничего получить, чтобы это заработало.
Может кто-нибудь подсказать, как я могу использовать @Inject для внедрения пользовательских bean-компонентов?
Просто, если вы хотите это увидеть, вот приложение на Github. https://github.com/reflexdemon/saml-metadata-viewer