zencd
@zencd

Как в Spring перехватить создание бинов определённого типа?

Допустим есть некий сервис 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));
    }
}
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 2
@pavelitel05
Аннотация @Component над классом, бин которого хотите получить. В Configuration файле- аннотация @ComponentScan(path) создает бины, помеченные первой аннотацией.
Ответ написан
Комментировать
Kats555
@Kats555
Используй спринг бут.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы