Допустим есть некий сервис Foo. В контроллере он вайрится, в конфиге определяется:
@Controller
class SomeCodeUsingFoo {
@Autowired
Foo foo;
}
@Configuration
class SomeConfig {
@Primary @Bean
public FactoryBean<Foo> fooFactory() {
// хочется избавиться от этого
return new MyFactory<>(Foo.class);
}
}
Вопрос: как избавиться от необходимости определять
FactoryBean<Foo>
в конечном приложении?
И, вместо этого, делать это в библиотеке автоматически, по некому критерию, не зная о существовании класса Foo.
Условно:
// на уровне конечного приложения
@DefineBeanForThatInLibrary
class Foo {}
// на уровне библиотеки
class SomewhereInLibraryConfig {
var beanClasses = findInterfacesHavingAnnotation(DefineBeanForThatInLibrary.class);
for (cls : beanClasses) {
defineBean(cls, new MyFactory(cls));
}
}