Подтвердить что ты не робот

Spring JavaConfig, bean настраиваемые области и аннотации

У меня проблема: 1) наш проект использует Spring подход JavaConfig (поэтому нет xml файлов) 2) Мне нужно создать собственную область видимости, пример в xml выглядит следующим образом:

<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
    <map>
        <entry key="workflow">
            <bean
                class="com.amazonaws.services.simpleworkflow.flow.spring.WorkflowScope" />
        </entry>
    </map>
</property>

Я понял это с помощью JavaConfig, это будет выглядеть примерно так:

    @Bean
public CustomScopeConfigurer customScope () {
    CustomScopeConfigurer configurer = new CustomScopeConfigurer ();
    Map<String, Object> workflowScope = new HashMap<String, Object>();
    workflowScope.put("workflow", new WorkflowScope ());
    configurer.setScopes(workflowScope);

    return configurer;
}

Исправьте меня, если я ошибаюсь в своем предположении.

3) Мне нужно аннотировать мой класс как @Component (scope = "workflow" ) снова xml-конфигурация будет выглядеть так:

<bean id="activitiesClient" class="aws.flow.sample.MyActivitiesClientImpl" scope="workflow"/>

Итак, в основном вопрос: правильно ли я с моим предположением использовать @Component (scope = "workflow" ), или ожидается, что он будет каким-то другим способом?

Спасибо

4b9b3361

Ответ 1

Вам нужно использовать аннотацию @Scope. Вот так:

@Scope("workflow")

Также возможно создать собственный спецификатор области видимости:

@Qualifier
@Scope("workflow")
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface WorkflowScoped {
}

и использовать его следующим образом:

@Component
@WorkflowScoped 
class SomeBean

Ответ 2

Я столкнулся с похожей ситуацией в моем проекте, см. здесь.

По сути, вы должны передать экземпляр класса WorkflowScope в качестве аргумента в методе customScope() и использовать его; в противном случае это не сработает:

@Bean
public CustomScopeConfigurer customScope(WorkflowScope workflowScope) {
    CustomScopeConfigurer configurer = new CustomScopeConfigurer();
    Map<String, Object> workflowScope = new HashMap<>();
    workflowScope.put("workflow", workflowScope);
    configurer.setScopes(workflowScope);

    return configurer;
}