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"/>