Spring bean инициализация методом множественного arg
Я хотел бы создать следующий Spring bean (монитор JMX), который имеет метод setThresholds (Number highThreshold, Number lowThreshold).
Могу ли я вызвать метод (с двумя аргументами) в конфигурации? Я не хочу писать коды для его вызова.
<bean id="myMonitor" class="javax.management.monitor.GaugeMonitor" init-method="start">
<property name="observedObject">
<bean class="javax.management.ObjectName">
<constructor-arg value="test.jmx:name=testBean1" />
</bean>
</property>
<property name="observedAttribute" value="testProperty" />
<property name="granularityPeriod">
<bean class="java.lang.Float">
<constructor-arg value="1000" />
</bean>
</property>
</bean>
Ответы
Ответ 1
Это возможно, используя MethodInvokingFactoryBean (Spring 4.x и 5.x) (Это не моя идея, я только что нашел этот форум: http://forum.springsource.org/archive/index.php/t-16354.html)
SomeClass someobject = new SomeClass();
someobject.set("String1","String2");
<bean id="someobject" class="SomeClass" />
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref="someobject">
<property name="targetMethod" value="set">
<property name="arguments">
<list>
<value>String1</value>
<value>String2</value>
</list>
</property>
</bean>
Ответ 2
Я этого никогда не видел. Большая идея Spring заключается в том, что вы создаете и инициализируете прямо вперед beans. Поэтому единственными методами, которые будут называться, являются, таким образом, одиночные аргументы Setters (...) и конструкторы. Определение того, что поддерживается, будет в следующей схеме:
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
Ваш путь к этой проблеме заключается в том, чтобы ваш bean реализовать InitializingBean
и вызвать ваш метод в методе void afterPropertiesSet()
:
например:
public void setHighThreadHold(Number highThreshHold) {}
public void setLowThreashHold(Number lowThreadHold) {}
public void afterPropertiesSet() {
setThresholds(highThreshold,lowThreshold);
}