鉴于以下内容:
public class ResourceOne implements AutoCloseable {...}
在(Spring)XML配置中实例化ResourceOne
的实例。
此对象(自动装配时)如何与“try-with-resources语句”一起使用,因为您需要在try块中实例化资源?
一种方法可能是使用引用(见下文),但这不是最佳选择。
public class Test {
@Autowired
ResourceOne test;
//...
public void execute()
{
//...
try (ResourceOne localTest = test)
{
localTest.init()
localTest.readLine();
//...
}
}
答案 0 :(得分:1)
AFAIK我认为你采取的方法似乎是唯一的方法。
try (ResourceOne localTest = test)
{
localTest.init()
localTest.readLine();
//...
}
我假设您已使用原型范围声明了您的自动装配资源。
@Bean
@Scope(value="prototype", proxyMode=ScopedProxyMode.DEFAULT)
public Resource1 resource1() {
return new Resource1();
}
答案 1 :(得分:0)
一种解决方案可能是自动装配spring应用程序上下文,并使其在运行时检索bean的实例。
public class Test {
@Autowired
ApplicationContext applicationContext
//...
public void execute()
{
//...
try (ResourceOne localTest = applicationContext.getBean(ResourceOne.class))
{
localTest.init()
localTest.readLine();
//...
}
}
这样,您就不必冒险在代码中包含ResourceOne的非功能实例,该实例可能会通过其他方法再次使用,并且由于尚未关闭而导致异常。