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:
Object get(String name, ObjectFactory<?> objectFactory)
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:
Object remove(String name)
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:
void registerDestructionCallback(String name, Runnable destructionCallback)
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:
String getConversationId()
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:
void registerScope(String scopeName, Scope scope);
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.
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.
Scope threadScope = new SimpleThreadScope();
beanFactory.registerScope("thread", threadScope);
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>
<aop:scoped-proxy/>ni
FactoryBean amalga oshirish uchun
<bean> deklaratsiyasiga joylashtirsangiz, ko'rinish sohasiga asli fabrik bin kiradi,
getObject()dan qaytarilgan ob'ekt emas.
GO TO FULL VERSION