Для этого есть два требования :
- Чтобы создать bean-компонент clientStub, мне нужно получить доступ к аннотации @Client, которая содержит некоторую важную информацию, которая используется для поиска соответствующей конфигурации в свойствах.
- Он должен поддерживать внедрение на основе конструктора (и внедрение параметров метода @Bean)
Код: Выделить всё
@Autowired
public MyService(
@Client("invoice-manager") InvoiceManagerClientStub clientStub,
SomeOtherBean bean1, ...) {
Код: Выделить всё
@Bean
MyService myService(
@Client("invoice-manager") InvoiceManagerClientStub clientStub,
SomeOtherBean bean1, ...) {
К сожалению, обычные BeanFactory, похоже, не знают об этом целевые аннотации.
Рассматриваемые альтернативы
Использование BeanPostProcessor для введите значения в аннотированные поля. Ну, это то, что я сейчас делаю, но мне кажется неправильным иметь неизменяемый класс с одним установщиком для внедрения.
Внедрение его в поле а затем представить его как bean-компонент или вызвать конструктор вручную — еще хуже.
Создание прокси-экземпляра внедренного класса. Это невозможно, поскольку внедренные классы генерируются + окончательные и не являются частью моей библиотеки.
Выведите конфигурацию из имени компонента: не знаю, как это реализовать, и как объяснить пользователю, как следует называть параметры конфигурации в их файлах свойств. Я также хотел бы избежать конфликтов имен компонентов.
Нецели
Перезапись любых основных компонентов. Я хотел бы распространять расширение как библиотеку (на основе Spring-Boot), поэтому следует избегать чрезмерной замены внутренних bean-компонентов Spring.
TLDR
Как мне сообщить Spring, чтобы он разрешил параметр, используя значение моей аннотации (резольвер)?
Подробнее здесь: https://stackoverflow.com/questions/603 ... annotation