#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 нельзя изменить — он предоставляется отдельной библиотекой.