Spring: вставить статический член (System.in) через конструктор

Я написал своего рода консольный клиент для простого приложения. Чтобы быть более гибким, я подумал, что было бы неплохо зависеть только от 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 ответа

Решение

Использование <util:constant ... />:

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

Я не уверен, что вы можете явно создать компонент, используя System.out (что я думаю, это то, что вы спрашиваете). Однако вы можете создать bean-компонент, который использует фабричный класс / метод для возврата объекта (в данном случае System.out)

<bean id="streamOut" class="examples.StreamFactory"
      factory-method="getSystemOut"/>
Другие вопросы по тегам