Есть ли более короткая версия того, как вы используете MethodInvokingFactoryBean в файле cfg?

#spring

#spring

Вопрос:

В настоящее время он используется, как показано ниже … интересно, существует ли более короткая версия (аналогичная пространству имен util)

 <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject">
            <ref bean="transformation" />
        </property>
        <property name="targetMethod">
            <value>addTransformers</value>
        </property>
        <property name="arguments">
            <list>
                <ref bean="customTransformers" />
            </list>
        </property>
    </bean>
  

Ответ №1:

Вы можете написать его немного короче, используя Spring P-Namespace

Ответ №2:

Вы используете очень подробный синтаксис, вы можете сделать его короче, просто сделав его более кратким:

 <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" ref="transformation"/>
    <property name="targetMethod" value="addTransformers"/>
    <property name="arguments">
        <list>
            <ref bean="customTransformers" />
        </list>
    </property>
</bean>
  

Помимо этого и, возможно, используя p: синтаксис, упомянутый @Ralph, я не знаю о ярлыке на основе пространства имен.

Ответ №3:

Другой подход, использующий @Configuration, но для настройки системного свойства, вы можете адаптировать, хотя:

 @Bean
public Properties retrieveSystemProperties(){
    return System.getProperties();
}

private Properties systemProperties;
public Properties getSystemProperties() {
    return systemProperties;
}
@Resource(name="retrieveSystemProperties")
public void setSystemProperties(Properties systemProperties) {
    this.systemProperties = systemProperties;
}

@Bean 
public MethodInvokingFactoryBean methodInvokingFactoryBean() { 
    MethodInvokingFactoryBean methodInvokingFactoryBean = new MethodInvokingFactoryBean();
    methodInvokingFactoryBean.setStaticMethod("java.lang.System.setProperties"); 
    systemProperties.setProperty("http.keepAlive", "false");
    methodInvokingFactoryBean.setArguments(new Object[]{systemProperties}); 
    return methodInvokingFactoryBean; 
}
  

Ответ №4:

Если у вас нет никаких параметров, вы можете сделать это:

 <bean id="mybean" factory-instance="otherBean" factory-method="getMyBean"/>