Реинициализация пружинного компонента на изменения свойств - PullRequest
0 голосов
/ 30 марта 2020

У меня есть следующие файлы:

propertiesContext. xml:

<bean id="properties" class="com.myProject.MyProperties"
        factory-method="getInstance" />

MyProperties. java:

/*
This class contains initialises the properties and has listeners to change a property whenever it changes. 
(The property is changed on a separate site to which the listeners listen).

getInstance() method returns an object of MyProperties.
It has Methods to return the properties.
*/

someContext. xml:

   <util:map id="someConfig">
        <entry key="someKey"
            value="#{properties.getProperty()}" />
        <entry key="key2" value="2" />
    </util:map>

    <bean id="factory1"
        class="org.springframework.immutableClass1">
        <constructor-arg index="0" ref="someConfig"></constructor-arg>
    </bean>

    <bean id="templateFactory"
        class="org.springframework.immutableClass2">
        <constructor-arg index="0" ref="factory1"></constructor-arg>
    </bean>

Класс, относящийся к компоненту:

someClass. java :

    @Autowired
    @Qualifier("templateFactory")
    private immutableClass2 template;

someOtherClass. java:

@listener(containerFactory = factory1, value="#{properties.getProperty()}")
void func()
{
...
}

Проблема заключается в том, что при изменении свойства класс MyProperties обновляет ha sh сопоставьте внутри него обновленные изменения, но карта someConfig в someConfig. xml не изменяется (очевидно).

Как сделать так, чтобы при каждом изменении свойства someConfig map также использует обновленное значение для someKey , а компоненты factory1 и templateFactory переинициализируются / обновляются соответственно?

Примечание: I не может добавлять методы в immutableClass1 и immutableClass2, поскольку классы встроены и, следовательно, являются неизменяемыми.

...