OSGi Aries Blueprint静态字段

时间:2014-09-01 22:15:10

标签: java spring osgi htmlunit blueprint

我需要创建一个bean,它将类​​实例作为构造函数参数。此类实例的有用值由类创建为静态字段。

具体来说,我正在尝试从HtmlUnit创建WebClient bean。 http://htmlunit.sourceforge.net/apidocs/com/gargoylesoftware/htmlunit/WebClient.html

您可以看到WebClient采用无参数构造函数(不需要),以及采用BrowserVersion实例的构造函数。 http://htmlunit.sourceforge.net/apidocs/com/gargoylesoftware/htmlunit/BrowserVersion.html

BrowserVersion将有用的实例定义为静态字段,例如:CHROME,FIREFOX_24,INTERNET_EXPLORER_11。

我需要在Aries Blueprint bean中引用其中一个BrowserVersion实例。

以下是蓝图设置的内容:

<bean id="webClient" class="com.gargoylesoftware.htmlunit.WebClient">
    <argument>??</argument>
</bean>

我试过了:

<argument><bean class="com.gargoylesoftware.htmlunit.BrowserVersion.FIREFOX_24" /></argument>
<argument value="com.gargoylesoftware.htmlunit.BrowserVersion.FIREFOX_24" />

我也试过在蓝图配置中创建一个BrowserVersion bean,我似乎无法做到这一点。

<bean id="webClient" class="com.gargoylesoftware.htmlunit.WebClient">
    <argument>
        <bean class="com.gargoylesoftware.htmlunit.BrowserVersion">
            <argument index="0" type="java.lang.String" value="Netscape" />
            <argument index="1" type="java.lang.String" value="5.0 (Windows)" />
            <argument index="2" type="java.lang.String" value="Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0" />
            <argument index="3" type="java.lang.Float"  value="24.0" />
        </bean>
    </argument>
</bean>

这应该与BrowserVersion上的a public constructor匹配。

任何想法,无论是计数我做错了什么?

1 个答案:

答案 0 :(得分:0)

使用辅助方法解决了这个问题。

<bean id="webClient" class="com.stackoverflow.HtmlUnitHelper" factory-method="getChromeClient" />

辅助方法很简单:

public static WebClient getChromeClient() {
    return new WebClient(BrowserVersion.CHROME);
}

也许有更好的解决方案,但这有效!