我想使用OWASP的反samy。 他们得到了一个Policy对象,它通过工厂方法实例化。
public static Policy getInstance(InputStream inputStream);
需要传递给factory-method的InputStream表示策略对象的配置文件。
是否可以在spring xml上下文配置中使用创建策略bean? 我知道,有一个Resource对象,可以从classpath加载文件。但我需要的是从该Resource对象中创建一个InputStream。我可以直接在xml-spring-context中执行此操作吗?或者我是否需要编写java代码才能获得InputStream?
答案 0 :(得分:15)
将factory-method方法与构造函数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>
请参阅Spring Reference的以下部分:
constructor-arg
上下文中使用的factory-method
)答案 1 :(得分:4)
@ seanizer的解决方案是一个很好的解决方案,如果Policy
在完成阅读后关闭了InputStream
,但显然它没有。这将导致泄漏,其严重性取决于调用的频率以及资源的性质。
为安全起见,您应该考虑使用writing a custom FactoryBean
implementation,它会安全地处理InputStream
的打开和关闭。 FactoryBean
会注入一个Resource
对象。