java - tools - spring wikipedia
Inicialización de frijol de primavera con el método de múltiples arg (2)
Es posible usando el MethodInvokingFactoryBean (Spring 4.x 5.x ) (No es mi idea, acabo de encontrarlo en este foro: 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>
Me gustaría crear el siguiente Spring Bean (un monitor JMX) que tiene un método setThresholds (Número alto de umbral, Número bajo de umbral) .
¿Puedo invocar el método (con dos argumentos) en la configuración? No quiero escribir códigos para invocarlo.
<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>
Nunca he visto esto hecho. La gran idea de Spring es que creas e inicializas beans directos. Por lo tanto, los únicos métodos que se llamarán son, por lo tanto, los argumentos individuales Setters (...) y Constructors. La definición de lo que está soportado estará en el siguiente esquema:
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
Su forma de solucionar este problema es lograr que su bean implemente InitializingBean
y llame a su método en el método void afterPropertiesSet()
:
p.ej:
public void setHighThreadHold(Number highThreshHold) {}
public void setLowThreashHold(Number lowThreadHold) {}
public void afterPropertiesSet() {
setThresholds(highThreshold,lowThreshold);
}