3

鉴于以下情况:

public class ResourceOne implements AutoCloseable {...}

ResourceOne在 (Spring) XML 配置中实例化的实例。

这个对象(当自动装配时)应该如何与“try-with-resources 语句”一起使用,因为您需要在 try 块中实例化资源?

一种方法是使用参考(见下文),但这并不是最佳选择。

public class Test {
@Autowired
ResourceOne test;
//...
public void execute()
{
 //...
 try (ResourceOne localTest = test)
 {
   localTest.init()
   localTest.readLine();
   //...
 }
}
4

2 回答 2

1

AFAIK 我认为您采取的方法似乎是唯一的方法。

try (ResourceOne localTest = test)
 {
   localTest.init()
   localTest.readLine();
   //...
 }

我假设您已经使用原型范围声明了您的自动装配资源,尽管是正确的。

    @Bean
    @Scope(value="prototype", proxyMode=ScopedProxyMode.DEFAULT)
    public Resource1 resource1() {
        return new Resource1();
    }
于 2013-05-02T16:00:36.493 回答
0

一个解决方案可能是自动装配 spring 应用程序上下文并让它在运行时检索 bean 的实例。

public class Test {

@Autowired
ApplicationContext applicationContext

//...
public void execute()
{
 //...
 try (ResourceOne localTest = applicationContext.getBean(ResourceOne.class))
 {
   localTest.init()
   localTest.readLine();
   //...
 }
}

这样,您就不会冒险在代码中存在 ResourceOne 的非功能性实例,该实例可能会被另一个方法再次使用并导致异常,因为它尚未关闭。

于 2019-07-17T10:12:53.803 回答