Я использую библиотеку Spring Kafka и хочу создать перехватчики с доступом к ApplicationContext. Однако эта библиотека создает объект для меня и не вводит зависимости.
@Component
public class ExampleProducerInterceptor extends ProducerInterceptor<Object, Object> {
@Autowired
private Environment environment;
...
}
application.yaml
:
spring:
kafka:
properties:
"interceptor.classes": com.example.ExampleproducerInterceptor
Кафка сама использует это свойство для создания объекта, вызывая конструктор по умолчанию, вне пружины.
Каковы методы доступа к приложению, как это? Могу ли я, например, предоставить класс-делегат Kafka для вызова там конструктора по умолчанию?
У меня уже есть некоторый код для настройки kafka до его создания, поэтому я могу также изменить имя класса перед этим:
@Autowired
private List<ProducerInterceptor> producerInterceptors;
List<String> producerClassNames = producerInterceptors
.map(Object::getClass)
.map(Class::getName)
.map(str -> str + "$enhancedBySpring") // Point to delegate class?
.collect(Collectors.toList());