Agar bean resurslarga yo‘lni o‘zi belgilasa va yetkazsa, ehtimol ResourceLoader yoki ResourcePatternResolver interfeysini ishlatib resurslarni yuklash mantiqan to‘g‘ri bo‘ladi. Misol uchun, qandaydir shablonni yuklashni ko‘raylik, bunda kerakli resurs foydalanuvchi roliga bog‘liq. Agar resurslar statik bo‘lsa, unda ResourceLoader interfeysidan (yoki ResourcePatternResolver interfeysidan) foydalanishni to‘liq tark etish mantiqan to‘g‘ri bo‘ladi, bean Resource xususiyatlarini ochib qo‘ysin, unga kerak bo‘lganlar, ularga ega bo'lish kerakligini kutadi.
Bunday xususiyatlarni keyinchalik kiritishni osonlashtiradigan narsa shundaki, barcha ilova kontekstlari maxsus PropertyEditor dan foydalanadilar va ro'yxatdan o'tkazadilar, bu JavaBeans sinfi bo'lib, String yo‘llarini Resource obyektlariga aylantira oladi. Masalan, quyidagi MyBean sinfi Resource turidagi template xususiyatiga ega.
package example;
public class MyBean {
private Resource template;
public setTemplate(Resource template) {
this.template = template;
}
// ...
}
class MyBean(var template: Resource)
XML-fayl konfiguratsiyasida template xususiyati quyidagi misolda ko'rsatilganidek oddiy qator bilan moslashtirilgan bo'lishi mumkin:
<bean id="myBean" class="example.MyBean">
<property name="template" value="some/resource/path/myTemplate.txt"/>
</bean>
Resurs yo‘li oldida prefiks yo‘qligiga e’tibor bering. Shuning uchun, ilova konteksti o‘zini ResourceLoader sifatida ishlatadi, resurs ClassPathResource, FileSystemResource yoki ServletContextResource orqali yuklanadi – aniq ilova konteksti turiga qarab.
Agar aynan bir turdagi Resource ni ishlatishga majburlash kerak bo‘lsa, prefiksdan foydalanishingiz mumkin. Quyidagi ikki misolda qanday qilib ClassPathResource va UrlResource (oxirgisida fayl tizimdagi faylga kirish uchun ishlatiladi) ni majburiy ishlatish ko'rsatilgan:
<property name="template" value="classpath:some/resource/path/myTemplate.txt">
<property name="template" value="file:///some/resource/path/myTemplate.txt"/>
Agar MyBean klassi anotatsiyalar orqali boshqariladigan konfiguratsiya uchun qayta ishlab chiqilsa, myTemplate.txt yo'li template.path nomli kalitda saqlanishi mumkin - masalan, Spring'ning Environment dan mavjud bo'lgan xususiyatlar faylida. So'ng, shablon yo'liga @Value kabi anotatsiya orqali murojaat qilish mumkin, u xususiyatlar plaseholderi orqali. Spring shablon yo'li qiymatini qator sifatida oladi, maxsus PropertyEditor qatorni Resource obyektiga aylantiradi, keyin u MyBean konstruktoriga joylashtiriladi. Quyidagi misolda buni qanday amalga oshirish ko‘rsatilgan.
@Component
public class MyBean {
private final Resource template;
public MyBean(@Value("${template.path}") Resource template) {
this.template = template;
}
// ...
}
@Component
class MyBean(@Value("\${template.path}") private val template: Resource)
Agar biz bir nechta templlarning qo'llab-quvvatlashini tashkil qilmoqchi bo'lsak, bir nechta klass yo'llarida joylashgan - masalan, bir nechta jarayonda - biz classpath*: prefiksini va wildcardlarni ishlatib, templates.path kalitini classpath*:/config/templates/*.txt ko'rinishida aniqlashimiz mumkin. Agar biz MyBean klassini quyidagi tarzda qayta ishlab chiqib, Spring shablon yo'lini Resource obyektlar massiviga aylantiradi va uni MyBean konstruktoriga joylashtirish mumkin.
@Component
public class MyBean {
private final Resource[] templates;
public MyBean(@Value("${templates.path}") Resource[] templates) {
this.templates = templates;
}
// ...
}
@Component
class MyBean(@Value("\${templates.path}") private val templates: Resource[])
GO TO FULL VERSION