Как создать уникальный экземпляр компонента для всех запросов веб-службы? - PullRequest
0 голосов
/ 09 апреля 2019

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

Заранее спасибо

...