Spring JavaConfig,bean的自定义范围和注释

use*_*470 12 configuration spring scope annotations

我有一个问题要解决: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>
Run Code Online (Sandbox Code Playgroud)

我用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;
}
Run Code Online (Sandbox Code Playgroud)

如果我的假设错了,请纠正我.

3)我需要将我的类注释为@Component(scope ="workflow"),xml配置将如下所示:

<bean id="activitiesClient" class="aws.flow.sample.MyActivitiesClientImpl" scope="workflow"/>
Run Code Online (Sandbox Code Playgroud)

所以基本上问题是 - 我是否正确使用@Component(scope ="工作流程"),或者预计会采用其他方式?

谢谢

Mic*_*aev 8

您需要使用注释@Scope.像这样:

@Scope("workflow")
Run Code Online (Sandbox Code Playgroud)

也可以创建自定义范围限定符:

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

并以这种方式使用它:

@Component
@WorkflowScoped 
class SomeBean
Run Code Online (Sandbox Code Playgroud)