JavaRush /Java blogi /Random-UZ /Bahor dangasalar uchun. Kod bilan asoslar, asosiy tushunc...

Bahor dangasalar uchun. Kod bilan asoslar, asosiy tushunchalar va misollar. 1-qism

Guruhda nashr etilgan
Ko'pchilik mening veb-loyiha uchun shablon yaratish va servletlardan foydalangan holda oddiy veb-xizmat yaratish haqidagi maqolalarimni o'qib chiqib , qachon Bahor haqida yozishimga hayron bo'lishdi. Men xohlamadim, men kitob o'qishni taklif qildim (va men hali ham kitob Internetdagi 10 yoki hatto 100 ta maqoladan yaxshiroq deb aytaman). Ammo endi men bir xil narsani turli odamlarga tushuntirishga qaror qildim, men bir marta o'tirib, maqola yozganimdan ko'ra ko'proq vaqt sarflayman va keyin unga havolani joylashtirdim. Shuning uchun men havola uchun yozyapman)). Bahor dangasalar uchun.  Kod bilan asoslar, asosiy tushunchalar va misollar.  1-1-qismUshbu maqolada men o'zimning misolimdan keyin 5 daqiqada bahorda ishchi loyihani qanday qilishni yozmayman. Men faqat asosiy narsalar haqida yozaman, ularni bilmagan holda, albatta, loyihani boshlash mumkin, lekin u erda nima sodir bo'layotgani va eng muhimi, nima uchun aniq bo'lmaydi.

Spring Framework nima?

Spring Framework yoki oddiygina Spring Java-da veb-ilovalarni yaratish uchun eng mashhur ramkalardan biridir. Ramka kutubxonaga o'xshash narsadir (ehtimol, bu atama sizga ko'proq tanishdir), lekin bitta nuqta bor. Taxminan aytganda, kutubxonadan foydalanib, siz shunchaki undagi sinflarning ob'ektlarini yaratasiz, kerakli usullarni chaqirasiz va shu bilan kerakli natijaga erishasiz. Ya'ni, ko'proq imperativ yondashuv mavjud: siz o'zingizning dasturingizda qaysi aniq vaqtda qaysi ob'ektni yaratishingiz kerakligini, qaysi vaqtda ma'lum bir usulni chaqirishingiz kerakligini va hokazolarni aniq ko'rsatasiz. Ramkalar bilan narsalar biroz boshqacha. Siz shunchaki o'zingizning ba'zi sinflaringizni yozasiz, u erda mantiqning bir qismini yozasiz va ramkaning o'zi sizning sinflaringiz ob'ektlarini yaratadi va siz uchun usullarni chaqiradi. Ko'pincha sizning sinflaringiz ramkadan ba'zi interfeyslarni amalga oshiradi yoki undan ba'zi sinflarni meros qilib oladi va shu bilan siz uchun allaqachon yozilgan ba'zi funksiyalarni oladi. Lekin bu shunday bo'lishi shart emas. Bahorda, masalan, ular imkon qadar bunday qattiq bog'lanishdan uzoqlashishga harakat qilishadi (sizning sinflaringiz ushbu ramkaning ba'zi sinflariga/interfeyslariga bevosita bog'liq bo'lsa) va bu maqsadda izohlardan foydalaning. Bu nuqtaga keyinroq qaytamiz. Ammo shuni tushunish kerakki, Spring bu siz uchun allaqachon yozilgan ba'zi sinflar va interfeyslar to'plamidir :) Men darhol qayd etmoqchimanki, Spring nafaqat veb-ilovalar uchun, balki eng keng tarqalgan konsol uchun ham ishlatilishi mumkin. barchamizga tanish bo'lgan dasturlar Va bugun biz hatto shunga o'xshash narsalarni yozamiz.

Tuzilishi

Ammo bahor - bu alohida ramka emas. Bu har biri o'ziga xos vazifani bajaradigan bir qancha kichik ramkalar uchun umumiy nomdir.
Bahor dangasalar uchun.  Kod bilan asoslar, asosiy tushunchalar va misollar.  1-2 qism
Ko'rib turganingizdek, bahor modulli tuzilishga ega. Bu bizga faqat ilovamiz uchun kerak bo'lgan modullarni ulash imkonini beradi va biz foydalanmasligimiz aniq. Bilishimcha, aynan shu yondashuv Bahorga o‘sha paytdagi raqibidan (EJB) o‘zib ketishga va yetakchilikni qo‘lga kiritishga yordam bergan. Chunki EJB dan foydalanadigan ilovalar ular bilan juda ko'p bog'liqliklarni tortib oldi va umuman olganda ular sekin va noqulay bo'lib chiqdi. Rasmda bahor ramkasi bir nechta modullardan iborat ekanligini ko'rsatadi:
  • ma'lumotlarga kirish;
  • veb;
  • yadro;
  • va boshqalar.
Bugun biz asosiy modulning ba'zi tushunchalari bilan tanishamiz, masalan: fasol, kontekst va boshqalar. Siz taxmin qilganingizdek, ma'lumotlarga kirish moduli ma'lumotlar bilan ishlash vositalarini (asosan ma'lumotlar bazalari), veb - tarmoqda ishlash uchun (shu jumladan, keyinroq muhokama qilinadigan veb-ilovalarni yaratish uchun) o'z ichiga oladi. Bundan tashqari, butun Bahor infratuzilmasi deb ataladigan narsa ham mavjud: rasman ramkaga kiritilmagan, ammo bahor loyihangizga muammosiz integratsiyalangan ko'plab boshqa loyihalar (masalan, foydalanuvchi ruxsati bilan ishlash uchun bir xil bahor xavfsizligi . sayt, umid qilamanki, biz ham qachondir his qilamiz).

Nega Java-da bahor?

Xo'sh, bu moda, zamonaviy va yosh bo'lishidan tashqari, darhol aytishim mumkinki, uni ozgina o'zlashtirganingizdan so'ng, siz qancha turli xil ishlar qilishingiz shart emasligini va qancha Bahor ekanligini tushunasiz. oladi. Siz bir necha o'nlab qator konfiguratsiyalarni yozishingiz, bir nechta sinflarni yozishingiz mumkin - va siz ishchi loyihaga ega bo'lasiz. Ammo "kaput ostida" qancha narsa borligi haqida o'ylashni boshlaganingizdan so'ng, agar siz xuddi shu loyihani yalang'och servletlarda yoki rozetkalarda va toza Java-da qilsangiz, qancha ish qilinayotgani va qancha kod yozishingiz kerak bo'ladi. - sochingiz tikka bo'ladi :) Hatto shunday ifoda borki, Bahorning "sehrli"si kabi. Bunda siz hamma narsa ishlayotganini ko'rasiz, lekin u erda hamma narsa ishlashi uchun qancha bo'lishi kerakligini va u erda hammasi qanday ishlashini taxminiy baholaysiz - bularning barchasi qandaydir sehr tufayli sodir bo'layotganga o'xshaydi)) Buni qilish osonroq. Bularning barchasi bir-biri bilan qanday bog'liqligini tushuntirishga urinishdan ko'ra, bularning barchasini sehr deb atash mumkin. tabassum data_ web-mvc_ security_ shunchaki asoslar.

DI/IoC

Agar siz Bahorda biror narsa o'qishga harakat qilgan bo'lsangiz, unda siz birinchi bo'lib bu harflar bo'lgan: DI/IoC . Endi men sizga ushbu maqoladan tanaffus qilishni va Habré-dagi ushbu maqolani o'qishni tavsiya qilaman ! IoC (Inversion of Control) - boshqaruvning inversiyasi. Men kutubxonadan foydalanganda qaysi ob'ektni qaysi usulga qo'ng'iroq qilishni o'z kodingizga o'zingiz yozasiz va ramkalar bo'lsa, ko'pincha ramka o'ng tomonda yozgan kodni chaqiradi, deb yozganimda bu haqda aytib o'tganman. moment. Ya'ni, bu erda siz endi kod/dasturni bajarish jarayonini nazorat qilmaysiz, lekin ramka buni siz uchun qiladi. Siz boshqaruvni unga o'tkazdingiz (nazoratning inversiyasi). DI bog'liqlik inversiyasi (qaramlikni inversiyasi, ya'ni modullaringiz/sinflaringiz o'rtasida qattiq aloqa o'rnatmaslikka urinish, bu erda bir sinf boshqasiga to'g'ridan-to'g'ri bog'langan) yoki bog'liqlik in'ektsiyasi (qaramlik in'ektsiyasi, bu mushuk ob'ektlari bo'lmaganda) deb tushuniladi. Siz asosan siz yaratgan va keyin ularni o'z uslublaringizga o'tkazasiz va Bahor ularni siz uchun yaratadi va siz unga shunchaki "men bu erda mushuk olmoqchiman" kabi bir narsani aytasiz va u buni sizning usulingizda sizga uzatadi). Keyingi maqolalarda biz ikkinchisiga tez-tez duch kelamiz.

Fasol va kontekst

Bahordagi asosiy tushunchalardan biri loviya . Aslini olganda, bu qandaydir sinfning ob'ektidir . Aytaylik, dasturimiz uchun 3 ta ob'ektdan foydalanishimiz kerak: mushuk, it va to'tiqush. Va bizda bir nechta usullardan iborat bo'lgan bir qator darslarimiz bor, ularda ba'zida usul uchun mushuk va boshqa usul uchun it kerak, ba'zida esa mushuk va to'tiqush kerak bo'lgan usullar mavjud (masalan, usul mushukni boqish uchun, hehe) va ba'zi usullarda uchta ob'ekt kerak bo'ladi. Ha, biz avval ushbu uchta ob'ektni asosiyda yaratishimiz mumkin, keyin ularni sinflarimizga va sinflar ichidan bizga kerak bo'lgan usullarga o'tkazishimiz mumkin ... Va hokazo. Va agar biz vaqti-vaqti bilan usullarimiz uchun qabul qilingan parametrlar ro'yxatini o'zgartirishni xohlayotganimizni tasavvur qilsak (yaxshi, biz biror narsani qayta yozishga yoki funksionallikni qo'shishga qaror qildik) - agar kerak bo'lsa, kodga juda ko'p tahrir qilishimiz kerak bo'ladi. biror narsani o'zgartirish. Endi bizda 3 ta emas, 300 ta shunday ob'ekt bor deb tasavvur qilsak-chi? Shu bilan bir qatorda bizning barcha ob'ektlarimizni umumiy ob'ektlar ro'yxatiga ( List<Object> ) yig'ish va uni barcha usullarga o'tkazish va usullarning ichidan bizga kerak bo'lgan u yoki bu ob'ektni olishdir. Ammo dastur davom etar ekan, ushbu ro'yxatga biron bir ob'ekt qo'shilishi yoki (yomoni) o'chirilishi mumkinligini tasavvur qilsak-chi? Keyin biz ro'yxatdagi ob'ektlarni indekslari bo'yicha oladigan barcha usullarda hamma narsa buzilishi mumkin. Keyin biz ro'yxatni emas, balki xaritani saqlashga qaror qilamiz, bu erda kalit bizga kerak bo'lgan ob'ektning nomi bo'ladi va qiymat ob'ektning o'zi bo'ladi va keyin biz undan kerakli ob'ektlarni shunchaki ularning nomi bilan olishimiz mumkin. : get("to'tiqush") va bunga javoban biz to'tiqush ob'ektini oldik Yoki, masalan, kalit ob'ektning sinfi va qiymat ob'ektning o'zi bo'lsa, biz endi ob'ekt nomini emas, balki oddiygina bizga kerak bo'lgan ob'ekt sinfini ko'rsata olamiz, bu ham qulay. Yoki hatto xarita ustiga qandaydir o'ramni yozing, bu erda siz ba'zi hollarda ob'ektlarni nomi bilan, boshqa hollarda esa sinf bo'yicha olishingiz mumkin bo'lgan usullarni yaratishingiz mumkin. Bu biz bahor dastur kontekstidan olingan narsadir . Kontekst loviya (ob'ektlar) to'plamidir. Kontekstga murojaat qiladigan bo'lsak, biz o'zimizga kerak bo'lgan loviyani (ob'ektni) uning nomi bo'yicha olishimiz mumkin, masalan, uning turi yoki boshqa narsa. Bundan tashqari, biz Bahordan bizga kerak bo'lgan loviyani uning kontekstida qidirishni va uni bizning usulimizga o'tkazishni so'rashimiz mumkin. Misol uchun, agar bizda shunday usul bo'lsa:
public void doSomething(Cat cat) {
    ...
}
Bahor biz uchun bu usulni chaqirganda, u bizning mushukimizning ob'ektini kontekstidan unga o'tkazdi. Endi bizning usulimizga mushukdan tashqari, to'tiqush ham kerak, deb qaror qildik. Bahordan foydalanish - biz uchun hech narsa oson emas! Biz shunchaki yozamiz:
public void doSomething(Cat cat, Parrot parrot) {
    ...
}
Bahor esa bizning bu usulimizni chaqirganda, biz bu erda mushuk va to'tiqushni o'tkazishimiz, uning kontekstiga o'tishimiz, bu ikki ob'ektni olishimiz va ularni bizning usulimizga o'tkazishimiz kerakligini tushunadi. Dasturimiz jilovini Bahorga topshirib, biz ob'ektlarni yaratish va ularni u chaqiradigan usullarimizga o'tkazish mas'uliyatini ham unga topshirdik. Savol tug'iladi: Spring qanday ob'ektlarni (qutilarni) yaratishni biladi?

Ilovani sozlash usullari

Ilovani sozlashning uchta asosiy usuli mavjud (ya'ni Spring-ga qaysi ob'ektlar bilan ishlashimiz kerakligini ayting):
  1. xml fayllari/konfiguratsiyalaridan foydalanish;
  2. java konfiguratsiyasidan foydalanish;
  3. avtomatik konfiguratsiya.
Bahor ishlab chiquvchilari ularni ushbu ustuvorlik tartibida tartibga soladi:
  • ustunlik berilishi kerak bo'lgan eng ustuvor usul - bu avtomatik konfiguratsiya;
  • agar avtomatik konfiguratsiyadan foydalansangiz, barcha mumkin bo'lgan fasollarni to'g'ri sozlash mumkin bo'lmasa, Java konfiguratsiyasidan foydalaning (Java kodidan foydalanib ob'ektlar yaratish);
  • Xo'sh, eng past ustuvor yo'l xml konfiguratsiyasidan foydalangan holda eski uslubdir.
Bundan tashqari, Bahor bu usullarni birlashtirishga imkon beradi. Masalan, Spring avtomatik ravishda sozlanishi mumkin bo'lgan hamma narsani bajarishiga ruxsat bering; ba'zi bir maxsus parametrlarni belgilashingiz kerak bo'lsa, buni Java konfiguratsiyasi yordamida bajaring va qo'shimcha ravishda ba'zi eski konfiguratsiyalarni xml formatida ulashingiz mumkin. Umuman olganda, bularning barchasi juda moslashuvchan tarzda amalga oshirilishi mumkin. Ammo baribir, agar hamma narsa avtomatik sozlamalar yordamida amalga oshirilishi mumkin bo'lsa, undan foydalaning. Men faqat avtomatik konfiguratsiya va Java konfiguratsiyasini ko'rib chiqaman; xml konfiguratsiyasi allaqachon Internetdagi deyarli har bir bahor misolida qo'llaniladi va Java konfiguratsiyasi qanday ishlashini tushunganingizdan so'ng, xuddi shu narsani bajaradigan xml faylini "o'qish" muammosi bo'lmasligi kerak. Avtomatik konfiguratsiya, biz ish uchun kerak bo'lgan ob'ektlar biz yozgan sinflar ob'ektlari bo'lsa ishlatiladi . Agar sinfimiz ob'ektini yaratish uchun juda aniq mantiq kerak bo'lsa yoki bizda avtomatik konfiguratsiya tomonidan olinadigan kerakli izoh bilan ba'zi bir sinfni belgilash imkoniyati bo'lmasa, buni Java konfiguratsiyasida qilish mumkin. . Keyingi qismda biz maven loyihasini yaratamiz, unga bir nechta markaziy bahor modullarini ulaymiz va birinchi loviyamizni yaratamiz.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION