Spring:将Resource作为InputStream注入工厂方法

neb*_*mir 8 java spring

我想使用OWASP的反samy.他们得到了一个Policy对象,它通过工厂方法实例化.

public static Policy getInstance(InputStream inputStream);
Run Code Online (Sandbox Code Playgroud)

需要传递给factory-method的InputStream表示policy-object的配置文件.

是否可以在spring xml context config中使用创建策略bean?我知道,有一个Resource对象,可以从classpath加载文件.但我需要的是从该Resource对象中创建一个InputStream.我可以直接在xml-spring-context中执行此操作吗?或者我是否需要编写java代码才能获得InputStream?

Sea*_*oyd 15

将factory-method方法与constructor-arg(将映射到工厂方法参数)一起使用,并从资源表示法自动转换为InputStream.

<bean id="policy" class="org.owasp.validator.html.Policy"
    factory-method="getInstance">

    <!-- type needed because there is also a getInstance(String) method -->
    <constructor-arg
        value="classpath:path/to/policyFile.xml"
        type="java.io.InputStream" />

</bean>
Run Code Online (Sandbox Code Playgroud)

请参阅Spring Reference的以下部分:

  • 嘿,我没有意识到Spring可以强制使用`InputStream`,这很整洁.但请注意,Spring不会关闭`InputStream`本身,它假定bean会这样做.如果`Policy`类没有关闭那个流,那么你最终会泄漏. (3认同)