2013-03-15 15 views
11

Ich habe ein Problem zu lösen: 1) unser Projekt verwendet Spring JavaConfig Ansatz (also keine XML-Dateien) 2) Ich muss benutzerdefinierten Bereich erstellen, Beispiel in XML sieht so aus :Spring JavaConfig, Bean benutzerdefinierte Bereiche und Anmerkungen

<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> 

ich es mit JavaConfig wird es heraus sieht wie folgt aus etwas:

@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; 
} 
mich

korrigieren i Ich liege falsch mit meiner Annahme.

3) Ich brauche meine Klasse etwas wie @Component (scope = "Workflow") wieder XML-Konfiguration wie folgt aussehen würde mit Anmerkungen versehen: So

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

im Grunde ist die Frage - bin ich richtig mit meiner Annahme, @Component zu verwenden (scope = "workflow") oder auf eine andere Art zu erwarten?

Dank

+0

Ich habe nur die Warnung '@Bean Methode getWorkflowScope ist nicht statisch und gibt ein Objekt zurück, das der BeanFactoryPostProcessor-Schnittstelle von Spring zuweisbar ist. Dies führt dazu, dass Annotationen wie @Autowired, @Resource und @PostConstruct nicht innerhalb der deklarierenden @Configuration-Klasse der Methode verarbeitet werden. Fügen Sie dieser Methode den Modifikator "static" hinzu, um diese Probleme mit dem Container-Lebenszyklus zu vermeiden. "Bitte beachten Sie, Ihre Methode sollte' @ Bean public ** statisch lesen ** CustomScopeConfigurer –

Antwort

8

Sie benötigen @Scope Anmerkung zu verwenden. Wie folgt aus:

@Scope("workflow") 

Es ist auch möglich, benutzerdefinierte Bereichsqualifizierer zu erstellen:

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

und verwenden Sie es auf diese Weise:

@Component 
@WorkflowScoped 
class SomeBean 
+0

Fügen Sie hinzu, da die ursprüngliche Frage AWS Simple Workflow verwendet Wenn Sie diese Klassen mit AspectJ generieren, verwenden Sie '@ Bean' und' @Scope ("workflow") '/' @ WorkflowScoped' in einer Konfigurationsklasse. – mkobit

Verwandte Themen