Создание пружинных компонентов с динамическими значениями свойств

#java #spring

#Ява #весна

Вопрос:

У меня есть следующий неизменяемый класс (т. Е. в отдельной библиотеке я не могу изменить):

 public class MyClass implements InitializingBean, BeanNameAware {  private BeanA prop1;  private BeanB prop2;   public MyClass() {}   @Override  public void afterPropertiesSet() {  // do smth with prop1 and prop2  } }  

Мне нужно создать несколько различных компонентов MyClass, но со значениями свойств (prop1, prop2), которые генерируются во время выполнения.

Как это реализовать?

Я пытался реализовать FactoryBeanlt;MyClassgt; , но у метода FactoryBean#getObject нет параметров.

BeanFactory#getBean с аргументами нельзя использовать, потому MyClass что для этих свойств нет аргументов конструктора (это отдельная библиотека).

Комментарии:

1. Почему бы не выполнить логику инициализации в вашем методе afterPropertiesSet? Достаточно ли объект знает о том, какими должны быть свойства после его создания? Каков ваш вариант использования здесь?

2. Как вообще настроены prop1 и prop2, используете ли вы файл конфигурации?

3. @Konrad MyClass предоставляется отдельной библиотекой, я не могу ее изменить.

4. Создайте класс конфигурации с @Bean методами для разных экземпляров MyClass .

5. @Turo Есть настройки для prop1 и prop2.

Ответ №1:

вы могли бы использовать javax.annotation.@PostContruct

 @Component public class MyClass {   private BeanA prop1;  private BeanB prop2;    @PostConstruct  public void doSomethingAfterInstanced() {  prop1 = null;  prop2 = new BeanB();  } }  

Комментарии:

1. Что является эквивалентом аннотации InitializingBean и не помогает решить проблему.

2. @Dilermando Лима Извините, забыл упомянуть, что MyClass нельзя изменить — он предоставляется отдельной библиотекой.