4

我有一個Spring豆,其聲明如下:參數傳遞到Spring工廠bean的工廠方法

<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 。當它用spring構建時,我需要將參數傳遞給getSecurityHandler方法。這甚至有可能嗎?我找不到任何有關它的文檔。

回答

5

我得到它的工作的唯一辦法是這樣的:

<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一切工作正常。

1

在舊版本的Spring中,可以使用constructor-arg來完成此操作。請參閱文檔here。你可能仍然可以這樣做。沒有嘗試過!

+0

謝謝我會嘗試。 –

+0

也從春季隊查看此博客文章:http://blog.springsource.org/2011/08/09/whats-a-factorybean/ –

+0

下面是一個示例:http://stackoverflow.com/questions/18446230/如何到注射 - 彈簧 - 豆換工廠方法需要再次MyClass的級參數 – Vadzim