2013-02-04 11 views
7

mam natknąć scenariuszu jak poniżej:Wiosna fasoli odniesienia w wielu nici

MyBean - Zdefiniowane w konfiguracji XML.

Potrzebuję wstrzyknąć MyBeana w wiele wątków. Ale moje wymagania są następujące: 1) Odniesienie pobrane w dwóch różnych wątkach powinno być różne 2) Ale powinienem uzyskać to samo odniesienie niezależnie od tego, ile razy będę pobierał fasolę z pojedynczego wątku.

Np

Thread1 { 

    run() { 
     MyBean obj1 = ctx.getBean("MyBean"); 
     ...... 
     ...... 
     MyBean obj2 = ctx.getBean("MyBean"); 
    } 
} 

Thread2 { 

    run(){ 
     MyBean obj3 = ctx.getBean("MyBean"); 
    } 
} 

więc w zasadzie obj1 == obj2 ale obj1 != obj3

Odpowiedz

10

Można użyć niestandardowego zakresu o nazwie SimpleThreadScope.

Z dokumentacji Spring:

Od Spring 3.0 dotyczący definicji wątek jest dostępny, ale nie jest zarejestrowany domyślnie. Aby uzyskać więcej informacji, zobacz dokumentację dla SimpleThreadScope. Instrukcje dotyczące rejestrowania tego lub innego niestandardowego zakresu można znaleźć w sekcji 3.5.5.2, “Using a custom scope”.

Oto przykład jak zarejestrować zakresu SimpleThreadScope:

Scope threadScope = new SimpleThreadScope(); 
beanFactory.registerScope("thread", threadScope); 

Następnie będziesz mógł używać go w definicji swojej fasoli:

<bean id="foo" class="foo.Bar" scope="thread"> 

Można również zrobić rejestracja Scope'a deklaratywnie:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/aop 
      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> 

    <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer"> 
     <property name="scopes"> 
      <map> 
       <entry key="thread"> 
        <bean class="org.springframework.context.support.SimpleThreadScope"/> 
       </entry> 
      </map> 
     </property> 
    </bean> 

    <bean id="foo" class="foo.Bar" scope="thread"> 
     <property name="name" value="bar"/> 
    </bean> 

</beans> 
2

Czego wymagać to nowy Temat lokalny zwyczaj zakres. Możesz wdrożyć własną lub use the one here.

Moduł niestandardowego zakresu nici to niestandardowa implementacja zakresu dla zapewniająca ziarno o określonym zakresie. Każde żądanie dotyczące komponentu bean zwróci to samo wystąpienie dla tego samego wątku.

Powiązane problemy