Hususy Görnüşler

All lectures for TK purposes
Dereje , Sapak
Elýeterli

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:

Java
Object get(String name, ObjectFactory<?> objectFactory)
Kotlin
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:

Java
Object remove(String name)
Kotlin
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:

Java
void registerDestructionCallback(String name, Runnable destructionCallback)
Kotlin
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:

Java
String getConversationId()
Kotlin
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:

Java
void registerScope(String scopeName, Scope scope);
Kotlin
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ň.

Aşakdaky mysalda, Spring-iň düzümine girýän, emma adatça hasaba alynmaýan SimpleThreadScope ulanylýar. Düzgünnamaňyz üçin görkezmeler, hususy Scope realizasiýalarynyň hemme görnüşi üçin birmeňzeşdir.
Java
Scope threadScope = new SimpleThreadScope();
beanFactory.registerScope("thread", threadScope);
Kotlin
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>
Eger sen <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.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION