JavaRush /Kurslar /All lectures for UZ purposes /Maxsus ko'rinish sohalari

Maxsus ko'rinish sohalari

All lectures for UZ purposes
Daraja, Dars
Mavjud

Binning ko'rinishini aniqlash mexanizmi kengaytiradigan. Siz o'z ko'rinish sohalaringizni aniqlashingiz yoki hatto mavjudlarini qayta aniqlashingiz mumkin, garchi bu so'nggi amaliyot yomon deb hisoblanadi, va siz singleton va prototype singari ichki ko'rinish sohalarini qayta aniqlay olmaysiz.

Maxsus ko'rinish sohasini yaratish

Maxsus ko'rinish sohalarini Spring konteyneriga integratsiya qilish uchun org.springframework.beans.factory.config.Scope interfeysini amalga oshirishingiz kerak, bu qismda tasvirlangan. Maxsus ko'rinish sohalarini qanday amalga oshirishingizni tushunish uchun, Spring Framework bilan yetkazib berilgan Scope amalga oshirishlarini va Scope javadoc-ni ko'rib chiqing, bu amalga oshirish kerak bo'lgan metodlar haqida batafsilroq ma'lumot beradi.

Scope interfeysida to'rtta metod mavjud bo'lib, ular ko'rinish sohasidan ob'ektlarni olish, ularni ko'rinish sohasidan o'chirish va ularni yo'q qilishni aniqlash imkonini beradi.

Masalan, session darajasidagi ko'rinish sohasining amalga oshirilishi, session darajasidagi ko'rinish sohasiga kirgan binni ko'chirilgan nusxasini qaytaradi (agar mavjud bo'lmasa, metod yangi bin nusxasini qaytaradi, uni keyinchalik foydalanish uchun sessiyaga bog'laydi). Quyidagi metod bazaviy ko'rinish sohasidan ob'ektni qaytaradi:

Java
Object get(String name, ObjectFactory<?> objectFactory)
Kotlin
fun get(name: String, objectFactory: ObjectFactory<*>): Any

Masalan, session darajasidagi ko'rinish sohasining amalga oshirilishi session darajasidagi ko'rinish sohasiga kirgan binni bazaviy sessiyadan o'chirib tashlaydi. Ob'ekt qaytarilishi kerak, lekin agar ko'rsatilgan nom bilan ob'ekt topilmasa null qaytarilishi mumkin. Quyidagi metod bazaviy ko'rinish sohasidan ob'ektni o'chiradi:

Java
Object remove(String name)
Kotlin
fun remove(name: String): Any

Quyidagi metod ko'rinish sohasidan yoki ko'rinish sohasidagi ko'rsatilgan ob'ektni yo'q qilishda ko'rinish sohasining boshlashi kerak bo'lgan qaytish chaqiruvini ro'yxatdan o'tkazadi:

Java
void registerDestructionCallback(String name, Runnable destructionCallback)
Kotlin
fun registerDestructionCallback(name: String, destructionCallback: Runnable)

Yo'q qilish qaytish chaqiruvlari haqida batafsil ma'lumotni javadocda yoki Springdagi ko'rinish sohasining amalga oshirishida ko'ring.

Quyidagi metod bazaviy ko'rinish sohasining dialog identifikatorini oladi:

Java
String getConversationId()
Kotlin
fun getConversationId(): String

Bu identifikator har bir ko'rinish sohasi uchun boshqacha. Session darajasidagi ko'rinish sohasining amalga oshirilishi uchun bu identifikator session identifikatori bo'lishi mumkin.

Maxsus ko'rinish sohasidan foydalanish

Bir yoki bir nechta maxsus Scope amalga oshirishlar yozilgandan va sinovdan o'tkazilgandan keyin, sizning yangi ko'rinish sohalaringizni Spring konteyneriga ma'lum qilishingiz kerak. Quyidagi metod yangi Scopeni Spring konteynerida ro'yxatdan o'tkazishning asosiy metodidir:

Java
void registerScope(String scopeName, Scope scope);
Kotlin
fun registerScope(scopeName: String, scope: Scope)

Bu metod ConfigurableBeanFactory interfeysida e'lon qilingan bo'lib, u Springdagi ko'pgina aniq ApplicationContext amalga oshirishlarida mavjud bo'lgan BeanFactory xususiyati orqali mavjud.

registerScope(..) metodining birinchi argumenti ko'rinish sohasiga bog'langan noyob nomdir. Spring konteyneridagi bunday nomlarning misollari singleton va prototype dir. registerScope(..) metodining ikkinchi argumenti siz ro'yxatdan o'tkazishni va foydalanishni xohlagan maxsus Scope amalga oshirishining haqiqiy namunasi.

Siz o'z Scope amalga oshirishingizni yozganingizni va uni quyidagi misolda ko'rsatilgandek ro'yxatdan o'tkazganingizni faraz qilish mumkin.

Quyidagi misolda, Spring tarkibidagi SimpleThreadScope dan foydalaniladi, lekin u sukut bo'yicha ro'yxatdan o'tmaydi. Sizning o'z Maxsus Scope amalga oshirishlaringiz uchun ko'rsatmalar aynan shunday bo'ladi.
Java
Scope threadScope = new SimpleThreadScope();
beanFactory.registerScope("thread", threadScope);
Kotlin
val threadScope = SimpleThreadScope()
beanFactory.registerScope("thread", threadScope)

Keyin siz quyida ko'rsatilgandek, o'z maxsus Scope amalga oshirishingizning ko'rinish qoidalariga muvofiq bo'lgan bin ta'riflarini yaratishingiz mumkin:

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

Maxsus Scope amalga oshirishingizdan foydalanganda siz ko'rinish sohasini dasturiy ro'yxatdan cheklanmayapsiz. Siz CustomScopeConfigurer klassidan foydalanib, quyida ko'rsatilgan misolda ko'rsatilgandek, Scope ni deklarativ ro'yxatdan o'tkazishingiz ham mumkin:

<?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>
Agar siz <aop:scoped-proxy/>ni FactoryBean amalga oshirish uchun <bean> deklaratsiyasiga joylashtirsangiz, ko'rinish sohasiga asli fabrik bin kiradi, getObject()dan qaytarilgan ob'ekt emas.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION