Передача параметра в метод фабрики bean-компонентов Spring

У меня есть bean-компонент Spring, который объявлен так:

<osgi:reference id="basicAuthSecurityHandler" interface="com.groupgti.handler.authentication.basic.Handler"/>
<bean id="securityHandler" factory-bean="basicAuthSecurityHandler" factory-method="getSecurityHandler"/>

Мой getSecurityHandler метод выглядит так:

public ConstraintSecurityHandler getSecurityHandler(String realm) {
    ConstraintSecurityHandler handler =(ConstraintSecurityHandler) factory.getBean("securityHandler");
    handler.setRealmName(realm);
    return handler;
}

Этот securityHandler bean-компонент входит в область prototype. Мне нужно передать параметр в метод getSecurityHandler, когда он построен с помощью пружины. Это вообще возможно? Я не могу найти никакой документации по этому поводу.


person Paulius Matulionis    schedule 04.09.2012    source источник


Ответы (2)


Единственный способ заставить его работать:

<osgi:reference id="basicAuthSecurityHandler" interface="com.groupgti.handler.authentication.basic.Handler"/>

<bean id="securityHandler" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" ref="basicAuthSecurityHandler"/>
    <property name="targetMethod" value="getSecurityHandler"/>
    <property name="arguments">
        <list>
            <value type="java.lang.String">${com.groupgti.esb.targetjobs.indeed.userRealm}</value>
        </list>
    </property>
</bean>

Пришлось использовать MethodInvokingFactoryBean. Я пробовал использовать constructor-arg, но тут возникло исключение, что такого конструктора нет. При использовании MethodInvokingFactoryBean все работает нормально.

person Paulius Matulionis    schedule 04.09.2012

В более старых версиях Spring это можно было сделать с помощью constructor-arg>. См. Документы здесь. Вы, вероятно, все еще можете это сделать. Еще не пробовал!

person Ashkan Aryan    schedule 04.09.2012
comment
также проверьте это сообщение в блоге от весенней команды: blog.springsource.org/ 09.08.2011 / whats-a-factorybean - person Ashkan Aryan; 04.09.2012
comment
Вот пример: stackoverflow.com/questions/18446230/ - person Vadzim; 14.11.2013