Весна 3: отложить бин инстанцирования - PullRequest
0 голосов
/ 19 марта 2020

У меня есть bean-компонент, использующий JNDI Connection Factory:

<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref="jndiTemplate"/>
    <property name="jndiName" value="SOME_NAME"/>
</bean>

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory</prop>
            <prop key="java.naming.provider.url">rmi://some_remote_host:1091</prop>
        </props>
    </property>
</bean>

Дело в том, что этот connectionFactory пытается подключиться к удаленному хосту , как только контекст загружен . Проблема заключается в том, что удаленная служба должна запускаться после загрузки контекста, не удается загрузить контекст и не удается развернуть приложение. Можно ли отложить соединение фабрики до того момента, когда оно действительно необходимо?

Другими словами, соединение с фабрикой соединений очень стремительно, и я хотел бы, чтобы оно было ленивым. Есть ли способ добиться этого аппартамента от подкласса Фабрики и взлома?

1 Ответ

2 голосов
/ 20 марта 2020

Боб может быть сделан Ленивый инициализированный с атрибутом lazy-init="true"

Из документации

Ленивый- Инициализированный bean-компонент сообщает контейнеру Io C о создании экземпляра bean-компонента при первом запросе, а не при запуске.

Также обратите внимание, что это поведение изменяется, когда lazy-initialized bean является зависимостью одноэлементный компонент, который не инициализируется ленивыми.

Пример конфигурации

<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
    <property name="jndiTemplate" ref="jndiTemplate" />
    <property name="jndiName" value="SOME_NAME"/>
</bean>
...