Bean-leriň görnüşini kesgitlemek mehanizmi giňeldilip biler. Sen özüňe mahsus görnüşleri döredip bilersiň ýa-da bar bolanlaryny üýtgedip bilersiň, ýöne soňky zat birneme nätakyk hasaplanýar, ondan başga içindäki singleton
we prototype
görnüşlerini üýtgedip bilmersiň.
Hususy Görnüş Döretmek
Spring konteýnere hususy görnüşleri goşmak üçin şu bölümde beýan edilen org.springframework.beans.factory.config.Scope
interfeysini durmuşa geçirmeli. Hususy görnüşleri nädip durmuşa geçirmelidigini bilmek üçin, Spring Framework bilen bilelikde getirilen Scope
realizasiýalaryny we Scope
javadoc bilen tanyş boluň, şol ýerde durmuşa geçirilmegi gerek bolan metodlar has giňişleýin düşündirilýär.
Scope
interfeysi dört metody öz içine alýar: obýektleri görnüşden almak, olary görnüşden aýyrmak we ýok edilmegine rugsat bermek.
Mysal üçin, session görnüşi realizasiýasy session görnüşine girýän kopiýalanan bean-y yzyna berýär (eger ýok bolsa, täze bean nusgasyny döretýär we ony sessiýa baglap goýýar), aşakdaky metod bolsa esasy görnüşden obýekti yzyna berýär:
Object get(String name, ObjectFactory<?> objectFactory)
fun get(name: String, objectFactory: ObjectFactory<*>): Any
Mysal üçin, session derejesindäki görnüşi realizasiýasy session derejesindäki görnüşine girýän bean-i esasy sessiýadan aýyrýar. Obýekt yzyna gaýtarylýar, ýöne görkezilen at bilen obýekt tapylmasa, null
bolup biler. Aşakdaky metod obýekti esasy görnüşden aýyrýar:
Object remove(String name)
fun remove(name: String): Any
Aşakdaky metod görnüşiň ýok edilende ýa-da çeşmedäki obýekt ýok edilirken başlatmaly bolan tizlik çagyryşyny hasaba alýar:
void registerDestructionCallback(String name, Runnable destructionCallback)
fun registerDestructionCallback(name: String, destructionCallback: Runnable)
Ýok edilme çagyryşlary barada has giňişleýin maglumat üçin javadoc ýa-da Spring-de güýzden geçirilýän görnüş realizasiýalary bilen tanyş boluň.
Aşakdaky metod esasy görnüş üçin söhbetdeşlik ID-sini alýar:
String getConversationId()
fun getConversationId(): String
Bu ID her görnüş üçin özgarýar. Mysal üçin, session görnüşi üçin bu ID sessiýa ID-si bolup biler.
Hususy Görnüş Ulanyş
Bir ýa-da birnäçe hususy Scope
realizasiýasyny ýazyp barlag edeniňden soň, Spring konteýneriniň seniň täze görnüşleriňi bilýän bolmagyny üpjün etmeli. Aşakdaky metod täze Scope
-y Spring konteýnerinde hasaba almagyň esasy usulydyr:
void registerScope(String scopeName, Scope scope);
fun registerScope(scopeName: String, scope: Scope)
Bu metod ConfigurableBeanFactory
interfeysinde beýan edilýär we BeanFactory
emlägi arkaly Spring bilen üpjün edilen ApplicationContext
-iň köpçülikleýin realizasiýalaryna elýeterlidir.
registerScope(..)
metodynyň ilkinji argümenti görnüş bilen baglanyşykly özboluşly at. Spring konteýneriniň içinde şeýle atlaryň mysallary singleton
we prototype
bolup biler. registerScope(..)
metodynyň ikinji argümenti, sen hasaba almak we ulanmak islän hususy Scope
-yň hakyky nusgasydyr.
Sen öz Scope
realizasiýaňy ýazyp, aşakdaky mysalda görkezilişi ýaly hasaba alandygyňy göz öňünde tutalyň.
SimpleThreadScope
ulanylýar. Düzgünnamaňyz üçin görkezmeler, hususy
Scope
realizasiýalarynyň hemme görnüşi üçin birmeňzeşdir.
Scope threadScope = new SimpleThreadScope();
beanFactory.registerScope("thread", threadScope);
val threadScope = SimpleThreadScope()
beanFactory.registerScope("thread", threadScope)
Soňra seniň öz Scope
realizasiýaňyň görnüş kesgitleme düzgünlerine laýyklykda bean kesgitlemeleri döredip bilersiň, aşakda görkezilişi ýaly:
<bean id="..." class="..." scope="thread">
Öz Scope
realizasiýanyňy ulanyp, sen diňe programmirlenen görnüşi hasaba almak bilen çäklendirilmeýärsiň. Sen hem CustomScopeConfigurer
klassyny ulanyp beýannama görnüşini hasaba alyp bilersiň, aşakdaky mysalda görkezilişi ýaly:
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.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="thing2" class="x.y.Thing2" scope="thread">
<property name="name" value="Rick"/>
<aop:scoped-proxy/>
</bean>
<bean id="thing1" class="x.y.Thing1">
<property name="thing2" ref="thing2"/>
</bean>
</beans>
<aop:scoped-proxy/>
-y
FactoryBean
realizasiýasy üçin
<bean>
atlamasyna girizeňde, görnüşe girýän zat
getObject()
tarapyndan yzyna getirilen obýekt däl-de, fabrika bean-iň özi bolýar.
GO TO FULL VERSION