Я пытаюсь создать экземпляр компонента, который будет одинаковым для всех запросов к моим веб-службам. Какова правильная конфигурация xml для Spring bean для достижения этой цели?
Я использую весеннюю версию 2.5.6, а веб-службы WSDL используют предложения, сгенерированные с помощью JAXB
Я уже пытался использовать scope = "singleton" на моем bean-компоненте, но он не работает, так как я печатаю строку каждый раз, когда инициализирую ее, и она печатается один раз для каждого запроса, который я делаю к веб-службе
Это боб, который я хочу сохранить:
private void initConection(){
client = new RedisClient(RedisURI.create("redis://pwd@localhost"));
appLogger.warn("Starting connection to Redis");
}
public void sendMesage(final String message){
if(client==null){
initConection();
}
appLogger.info(message);
Long listLenght = connection.rpush("logstash_dev", message);
}
Это конфигурация моих бобов:
<bean id="elasticLogger" class="mx.logging.ElasticLogger" scope="singleton">
<property name="bc">
<ref bean="brokerCaller"/>
</property>
</bean>
<bean id="brokerCaller" class="mx.logging.jms.BrokerCaller" scope="singleton">
</bean>
Внутри класса ElasticLogger у меня есть мой автонастроенный компонент
@Autowired
private BrokerCaller bc;
Наконец, в основном потоке приложения я называю свой класс следующим образом:
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});
ElasticLogger el = (ElasticLogger) appContext.getBean("elasticLogger");
С этим кодом я ожидал бы, что мои bean-компоненты (или, по крайней мере, тот, который называется BrokerCaller) останутся в живых для всех запросов к веб-службе, но класс будет создаваться снова и снова каждый раз, когда я вызываю веб-службу.
Заранее спасибо