2011-04-21 31 views
0

我想知道是否可以从XML配置文件中引用Java属性。引用来自XML文件的Java属性

更确切地说,这就是我的XML文件看起来像现在:

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
<property name="jobDetail"> 
    <ref local="exampleJob" /> 
</property> 

<!-- run monday at 10 --><!-- 0 0 10 ? * MON --> 
<property name="cronExpression" value="0 0 10 ? * MON"/> 
</bean> 

这就是我想要得到什么(它不工作):

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
<property name="jobDetail"> 
    <ref local="exampleJob" /> 
</property> 

<!-- run monday at 10 --><!-- 0 0 10 ? * MON --> 
<property name="cronExpression"> 
    <value>fr.bla.web.utils.APP_VAR.attribut</value> 
</property> 
</bean> 

其中APP_VAR是一个Java接口,并且属于我感兴趣的最终静态属性。

这可能吗?

+1

什么程序处理这个XML?显然与Java bean有关?如果是这样,请明确说明。你当然可以把这个值放在一个XML文件中,但问题是关于某个应用程序是否可以检索被引用的属性,对吧? – LarsH 2011-04-21 16:22:33

+0

嗯,我不知道用豆类工作是否相关,所以我没有提到它。实际上,我不想将值放在XML文件中,我希望在APP_VAR界面中设置该值,该界面包含应用程序的大部分变量,如文件夹路径等。 – l0r3nz4cc10 2011-04-21 16:32:19

+0

当我说“你可以当然会把这个价值放在一个XML文件中“,我的意思是你可以把' fr.bla.web.utils.APP_VAR.attribut'放在一个XML文件中。问题是使用XML的应用程序是否能够使用它从APP_VAR接口提取值。从理论上讲,这当然是可能的,但这对你没有多大帮助。如果我们更了解将使用XML的应用程序,例如它使用了什么框架,我们可以试着回答它是否以及如何取消引用fr.bla.web.utils.APP_VAR.attribut。 – LarsH 2011-04-21 20:14:00

回答

1

你好,这是可行的使用这样的:

<property name="cronExpression"> 
    <util:constant static-field="fr.bla.web.utils.APP_VAR.attribut"/> 
</property> 

但要能使用UTIL:常数,你必须在UTIL命名空间添加到您的豆元素:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation=" 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> 

注意:你也可以使用“spring-ut il-2.5.xsd“(对于spring 2.5)或通用的”spring-util.xsd“(没有使用我已经使用的后缀”-3.0“)。随你便。

+0

正是我在找的:)非常感谢! – l0r3nz4cc10 2011-04-22 14:34:50

0

XML本身只是数据的文本表示,所以与平台或语言无关。但是,根据您用于生成/使用XML的内容,您可能会替换/查找所需的值。

有关您的环境和您将要用来创建/读取XML的更多细节将有助于您获得更具体的答案。

+0

嗯,这是一个GWT Web应用程序,而XML文件是一个application-context.xml文件。我认为它是手动生成的,并且在创建新Dao或新服务时更新。 – l0r3nz4cc10 2011-04-21 16:46:55

0

的XPath:

/fr/bla/web/utils/APP_VAR[@attribute] 

了解它。你不会后悔。使用

例子:

// XPath expression 
    String xp = "/Envelope/Body/*[position()=1]"; 

    // opening source XML 
    InputSource is = new InputSource(); 
    is.setCharacterStream(new StringReader(testMessage));   

    // parsing XML to DOM 
    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
    domFactory.setNamespaceAware(false); 
    DocumentBuilder builder = domFactory.newDocumentBuilder(); 
    Document doc = builder.parse(is);  

    // compiling XPath (to re-use) 
    XPathFactory factory = XPathFactory.newInstance(); 
    XPath xpathCompiled = factory.newXPath(); 
    XPathExpression expr = xpathCompiled.compile(xp); 

    // getting nodes/values matching the XPath from the XML 
    NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 
+0

好吧,虽然它不是我正在寻找的,但它值得尝试和有趣。谢谢 !现在我知道如何用java和XPath编辑xml文件了 – l0r3nz4cc10 2011-04-22 14:33:55