使用多重arg方法的Spring bean初始化
我想创建以下Spring bean(JMX监视器),它具有方法setThresholds(Number highThreshold,Number lowThreshold)。使用多重arg方法的Spring bean初始化
我可以在配置中调用方法(带有两个参数)吗?我不想编写代码来调用它。
<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>
有可能通过使用MethodInvokingFactoryBean(春季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>
工厂bean必须在“someObject”之外 – byeo 2012-06-14 18:18:01
@byeo:是的,那是对的。在上面的例子中,它已经在外面了(在'someobject'的bean定义的末尾有一个'/'),但是缩进是令人困惑的。 - 我现在改进了格式。 – Ralph 2012-06-15 06:34:13
如果您想将其用于配置目的,它似乎非常臃肿。如果你有20个参数给应用程序,你将定义40个bean,20个实际bean和20个工厂bean(不太容易阅读,恕我直言)。我的意思是配置文件臃肿。尽管如此,我尝试了一个JAVA解决方案,而且这个解决方案看起来也很臃肿... :) – Timo 2013-09-06 10:03:27
我从来没有见过这样做。 Spring的主要思想是创建并初始化直接前进的bean。因此,将被调用的唯一方法是单参数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);
}
因为它是一个J2SE类,我不想添加一个包装类,只是为了调用方法... – 2011-03-18 08:42:04
“我不想写代码来调用它。”为什么不?为什么你想在XML中做奇怪的事情,而不是在Java中做它属于的地方? – skaffman 2011-03-18 08:41:01
@skaffman - 出于维护的原因...我通常喜欢用XML保存这种配置细节。 – 2011-03-18 09:18:51
类似的问题:http://stackoverflow.com/questions/5312605/spring-configuring-bean-with-a-two-argument-setter/5312634#5312634 – 2011-03-18 10:24:42