2

iocにutil:constantタグを使用しようとしていますが、次のエラーメッセージが表示されます。

スレッド"main"の例外org.springframework.beans.factory.BeanDefinitionStoreException:クラスパスリソース[spring.xml]で定義された名前'threadPoolExecutor'のBeanの登録中にエラーが発生しました:不明なプロパティサブ要素:<util:constant>

これが私のxmlです:

<?xml version="1.0" encoding="UTF-8"?>
<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.1.xsd 
 http://www.springframework.org/schema/util  http://www.springframework.org/schema/util/spring-util-3.1.xsd">


<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>classpath:config.properties</value>
    </property>
</bean>

<bean id="main" class="pikefin.Main">
<property name="executorSample" ref="executorSample"/>
</bean>


<bean id="executorSample" class="pikefin.ExecutorSample">
    <constructor-arg ref="threadPoolExecutor" />

</bean>


<bean id="threadPoolExecutor" class="java.util.concurrent.ThreadPoolExecutor">
    <constructor-arg index="0" value="2"/>
    <constructor-arg index="1" value="2"/>
    <constructor-arg index="2" value="10"/>
    <constructor-arg index="3"><util:constant static-field="java.util.concurrent.TimeUnit.SECONDS"/></constructor-arg>
    <constructor-arg index="4" ref="arrayBlockingPool"/>
</bean>

<bean id="arrayBlockingPool" class="java.util.concurrent.ArrayBlockingQueue">
    <constructor-arg value="5"/>
</bean>

</beans>

アップデート:

<value>これが、別のエラーメッセージを引き起こすタグが追加された私のxmlです:

要素'util:constant'で始まる無効なコンテンツが見つかりました。この時点では、子要素は予期されていません。

(補足:SOに投稿すると、何らかの理由でフォーマットコントロールが表示されなくなりました)

<?xml version = "1.0" encoding = "UTF-8"?>
<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.1.xsd
 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">


<bean class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name = "locations">
        <value> classpath:config.properties </ value>
    </プロパティ>
</ bean>

<bean id = "main" class = "pikefin.Main">
<property name = "executorSample" ref = "executorSample" />
</ bean>


<bean id = "executorSample" class = "pikefin.ExecutorSample">
    <constructor-arg ref = "threadPoolExecutor" />

</ bean>


<bean id = "threadPoolExecutor" class = "java.util.concurrent.ThreadPoolExecutor">
    <constructor-arg index = "0" value = "2" />
    <constructor-arg index = "1" value = "2" />
    <constructor-arg index = "2" value = "10" />
    <constructor-arg index = "3">
        <値>
            <util:constant static-field = "java.util.concurrent.TimeUnit.SECONDS" />
        </ value>
    </コンストラクタ-arg>
    <constructor-arg index = "4" ref = "arrayBlockingPool" />
</ bean>

<bean id = "arrayBlockingPool" class = "java.util.concurrent.ArrayBlockingQueue">
    <constructor-arg value = "5" />
</ bean>

</ Beans>
4

1 に答える 1

3

列挙型の場合、値を直接割り当てることができ、Springが値を正しい列挙型にバインドします。

<constructor-arg index="3" value="SECONDS">

また、あなたの元のエントリは私のために完全に機能しました:

<bean id="threadPoolExecutor" class="java.util.concurrent.ThreadPoolExecutor">
    <constructor-arg index="0" value="2"/>
    <constructor-arg index="1" value="2"/>
    <constructor-arg index="2" value="10"/>
    <constructor-arg index="3"><util:constant static-field="java.util.concurrent.TimeUnit.SECONDS"/></constructor-arg>
    <constructor-arg index="4" ref="arrayBlockingPool"/>
</bean> 
于 2012-05-09T21:32:02.967 に答える