Java 使用多参数方法初始化Springbean

Java 使用多参数方法初始化Springbean,java,spring,Java,Spring,我想创建以下Springbean(一个JMX监视器),它有一个方法setThresholds(Number highThreshold,Number lowThreshold) 我可以在配置中调用该方法(带有两个参数)吗?我不想编写代码来调用它 <bean id="myMonitor" class="javax.management.monitor.GaugeMonitor" init-method="start"> <property name="observedObje

我想创建以下Springbean(一个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>

我从未见过这样做。Spring的主要思想是创建并初始化直接向前的bean。因此,将被调用的唯一方法是单参数设置器(…)和构造函数。支持内容的定义将在以下架构中:

解决此问题的方法是让bean实现
初始化bean
,并在
void afterPropertiesSet()
方法中调用您的方法:

例如:


使用(Spring和)(这不是我的主意,我只是在这个论坛上发现的:)



String1
String2

“我不想编写代码来调用它”。为什么不呢?为什么你想在XML中做一些奇怪的事情,而不是在它所属的Java中做呢?@skaffman-出于维护的原因…我通常喜欢在XML中保留这种配置细节。类似的问题:由于它是一个J2SE类,我不想仅仅为了调用该方法而添加包装器类…工厂bean必须在“someObject”之外@拜奥:是的,没错。在上面的示例中,它已经在外部(在
someobject
bean定义的末尾有一个“/”),但是缩进很混乱我现在已经改进了格式。如果你想用它进行配置,我觉得它太夸张了。如果应用程序有20个参数,那么将定义40个bean、20个实际bean和20个(不太容易阅读,imho)工厂bean。我的意思是,配置文件膨胀了。尽管如此,我还是尝试了一个JAVA解决方案,但它似乎也有些臃肿……:)@蒂莫:如果你对这个问题有更好的/其他的解决方案,那就发表你自己的答案。但是如果你只想抱怨Spring,那么请使用一些博客,但不要滥用评论功能。@Ralph我没有更好的解决方案,否则我会发布它。我希望触发你(即任何人)接受我的评论,并在我没有立即看到的情况下找到一个“更好”的解决方案。在这件事上,我理解春天的哲学,并不想抱怨。没有冒犯的意思!
public void setHighThreadHold(Number highThreshHold) {}

public void setLowThreashHold(Number lowThreadHold) {}


public void afterPropertiesSet() {
    setThresholds(highThreshold,lowThreshold);
}
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>