2013-06-27 66 views
0

我有一個包含final字段的bean。如何創建只有帶參數的構造函數的動態bean

public class Foo { 
    Service service; 
    final String bar; 
    public Foo(String bar){}; 
} 

service是不是最終的,並有一個setter。 bar是最終的,可以有很多值。我無法刪除final關鍵字。我嘗試創建一個允許使用注入服務和動態條值創建Foo實例的彈簧工廠。 factory.create(bar)Foo豆在運行時實例化,因爲bar值是未知的,無節制的

我有嘗試:

  • @Configuration,但配置不允許參數不是彈簧或動態參數管理。
  • 查找方法需要一個無參數構造函數。

任何想法?

謝謝!

回答

4

看看ApplicationContext.getBean(String name, Object... args)方法。您可以使用args參數將參數傳遞給bean創建。

+0

感謝您的回答,ApplicationContext.getBean似乎侵入性較小的方式。 –

0

您可以使用構造函數注入在應用程序上下文XML作爲一個辦法做到這一點:

<bean name="foo" class="com.example.Foo"> 

    <constructor-arg index="0">Bar</constructor-arg> 

</bean> 

編輯:錯過了,看看這個問題:How to use @Autowired in spring

第二個答案(不是我)

它看起來像你可能能夠在這裏使用@Configurable註釋。

+0

'Foo' bean在運行時會被實例化,因爲'bar'值是未知的且無界的。 XML bean定義不能成爲答案 –

+0

感謝您的回答。 @Configurable有點侵入性。它需要aspectj和編織在運行時 –

相關問題