2011-01-02 18 views
15

クラスパスのURLをBeanのSpringに依存しない方法で挿入したいと思います。つまり、BeanはSpringのインターフェース/クラスを使用すべきではありません。どうやってやるの?Spring:クラスパスリソースのURLを挿入してください

+0

あなたはまさに、「URL」とはどういう意味ですか?これはクラスパスリソースを持つ人工的な概念です。あなたはそのURLで何をしますか? – skaffman

+0

ストリームを開き、そこから読み取る – IttayD

+0

クラスパスリソースの場合は、パス自体を注入しないでください。 Springリソース抽象化では、使用しない場合はほとんど価値がありません。 – skaffman

答えて

15

春は暗黙のうちにjava.net.URLclasspath:...値を変換することができます:

public class Foo { 
    private URL url; 
    ... 
} 

<bean class = "Foo"> 
    <property name = "url" value = "classpath:..." /> 
</bean> 
+2

原因:org.springframework.core.convert.ConversionFailedException:値 "classpath:etc/warmup.xml"をタイプ 'java.lang.String'から 'java.net.URL'に変換することができません。ネストされた例外はjava.net.MalformedURLExceptionです:unknown protocol:classpath – IttayD

+0

@IttayD:Spring 3.0.2でうまく動作します。パスは既存のリソースを指している必要があることに注意してください。 – axtavt

+0

私は春3.0.4を持っています。私は春のソースコードを見て、それが "classpath"を扱う場所を見ることができません。私が見ていることから、URLに変換しようとする。私は "classpath"のURLStreamHandler実装を見つけることができません – IttayD

1

Spring's resource conceptに相当するものはほとんどありません。

たとえば、GuavaInputSupplierを代わりに使用できますが、そうした場合は強力な標準の春の機能がありません。

2

MyClasspathResourceのようにorg.springframework.core.io.ClassPathResourceを拡張してSpringリソースを独自に作成すると、ClassPathResourceが拡張され、この型がBeanに挿入されます。このように、あなたは春に依存することなく、後であなたのリソースを他のものと再実装することができます。

あなたが自分で豆春の注釈を許可する場合、あなたはこのようにそれを行うことができ、axtavtの答えに続き
<bean class="myBean"> 
<property name="classPathType"> 
    <bean class="org.test.bla.MyClasspathResource"> 
    <constructor-arg index="0" value="classpath:/org/test/bla/MyUrl" /> 
    </bean> 
</property> 
</bean> 
4

@Value("classpath:myClasspathLocation") private URL url; 
関連する問題