Spring:通过构造函数注入静态成员(System.in)

时间:2010-03-20 13:04:27

标签: java spring dependency-injection constructor-injection

我为一个简单的应用程序编写了某种控制台客户端。 为了更加灵活,我认为仅依靠java.io.Input-/OutputStream而不是直接访问System.in/out会很好。

我将课程ConsoleClient重命名为StreamClient,添加了设置工具,并确保使用实例字段代替System.in/out

目前我的客户端代码如下所示:

ApplicationContext appCtx = new ClassPathXmlApplicationContext("...");
StreamClient cc = (StreamClient) appCtx.getBean("streamClient");
cc.setInputStream(System.in);
cc.setOutputStream(System.out);
cc.run();   // start client

问题:

有没有办法将第3行和第4行移动到Spring配置中(最好是构造函数注入)?

感谢您的时间。

2 个答案:

答案 0 :(得分:5)

使用<util:constant ... />

<util:constant id = "out" static-field="java.lang.System.out" />

答案 1 :(得分:0)

我不确定您是否可以使用System.out显式创建bean(我认为这就是您所要求的)。但是,您可以创建一个使用工厂类/方法返回对象的bean(在本例中为System.out

<bean id="streamOut" class="examples.StreamFactory"
      factory-method="getSystemOut"/>