2014-09-01 50 views
0

我需要创建一个将类实例作为构造函数参数的bean。该类实例的有用值由类创建为静态字段。OSGi白羊座蓝图静态字段

具体而言,我试图从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 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匹配。

任何想法我做错了两个计数?

回答

0

通过使用辅助方法解决它。

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

辅助方法很简单:

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

也许有一个更好的解决方案,但这个工作!