JavaRush /Java Blog /Random-TK /Bahar ýaltalar üçin. Kod bilen esaslar, esasy düşünjeler ...

Bahar ýaltalar üçin. Kod bilen esaslar, esasy düşünjeler we mysallar. 2-nji bölüm

Toparda çap edildi
Iň soňky makalada baharyň nämedigini, gaplaryň nämedigini we mazmunyny gysgaça düşündirdim. Indi hemmesiniň nähili işleýändigini synap görmegiň wagty geldi. Bahar ýaltalar üçin.  Kod bilen esaslar, esasy düşünjeler we mysallar.  2-nji bölümIntellij Idea Enterprise Edition-da özüm ederin. Myöne ähli mysallarym mugt Intellij Idea Community Edition-da işlemeli. Ekran suratlarynda mende ýok penjiräniň bardygyny görseňiz, alada etmäň, bu taslama üçin möhüm däl :) Ilki bilen boş Maven taslamasyny döredeliň. Makalada muny nädip etmelidigini görkezdim (“ Täze taslamamyzy web taslamasyna öwürmegiň wagty geldi ” sözlerine çenli okaň , şondan soň web taslamasyny nädip döretmelidigini görkezýär, indi bize zerurlyk ýok) Src / esasy bukjada döredeliň / java käbir paketdir (meniň ýagdaýymda "" ru.javarush.info.fatfaggy.animals"diýdim, islän zadyňyzy atlandyryp bilersiňiz, adyňyzy dogry ýerlerde çalyşmagy ýatdan çykarmaň). MainUsuly düzjek synpymyzy döredeliň
public static void main(String[] args) {
    ...
}
Soňra pom.xml faýly açyň we şol ýere bölüm goşuň dependencies. Indi “Maven” ammaryna baryp , iň soňky durnukly wersiýanyň bahar mazmunyny gözleýäris we bölümiň içindäki zatlary goýýarys dependencies. Bu prosesi bu makalada birneme has jikme-jik düşündirdim (" Mawende garaşlylygy birikdirmek " bölümine serediň ). Soňra Maweniň özi zerur baglylyklary tapar we göçürip alar we ahyrynda şuňa meňzeş bir zat almaly:
Bahar ýaltalar üçin.  Kod bilen esaslar, esasy düşünjeler we mysallar.  2-nji bölüm
Çep penjirede paket we synp bilen taslamanyň gurluşyny görüp bilersiňiz Main. Orta penjirede pom.xml-iň nähili görünýändigi görkezilýär. Mundan başga-da, men bir aýratynlyk bölümini goşdum , onda Maven-a deslapky kodda Java-yň haýsy wersiýasyny ulanýandygymy we haýsy wersiýasyny düzmelidigini görkezdim. Munuň sebäbi, Java-yň köne wersiýasynyň ulanylýandygyna başlanda duýduryş bermek islemeýärin. Muny edip bilersiňiz, edip bilmeýärsiňiz) Sag penjirede - diňe bahar kontekstini birikdirendigimize garamazdan, awtomatiki usulda ýadro, noýba, aop we aňlatma goşýandygyny görüp bilersiňiz. Her moduly aýratyn birleşdirip, wersiýanyň aç-açan görkezilmegi bilen ýatda her birine garaşlylygy hasaba alyp bolýardy, emma häzirlikçe bu saýlawdan hoşal. Indi bir paket ( subýektler ) döredeliň entitieswe onda 3 synp döredeliň: Cat,, Dog. ParrotHer haýwanyň ady bolsun ( private String nameşol ýerde käbir bahalary gaty kodlap bilersiňiz) we alýanlar / sazlaýjylar köpçülige açyk. Indi synpa giriň Mainwe main()usulda şuňa meňzeş bir zat ýazyň:
public static void main(String[] args) {
	// create an empty spring context that will search for its beans by annotations in the specified package
	ApplicationContext context =
		new AnnotationConfigApplicationContext("ru.javarush.info.fatfaggy.animals.entities");

	Cat cat = context.getBean(Cat.class);
	Dog dog = (Dog) context.getBean("dog");
	Parrot parrot = context.getBean("parrot-kesha", Parrot.class);

	System.out.println(cat.getName());
	System.out.println(dog.getName());
	System.out.println(parrot.getName());
}
Ilki bilen kontekst obýektini döredýäris we konstruktorda noýba barlygy üçin skanirlenmeli paketiň adyny berýäris. Springagny, Bahar bu bukjanyň içinden geçer we Baharyň noýba bolandygyny habar berýän ýörite bellikler bilen bellenen sapaklary tapmaga synanyşar. Ondan soň bu synplaryň obýektlerini döredýär we kontekstinde ýerleşdirýär. Ondan soň bu kontekstden pişik alýarys. Kontekst obýektine ýüzlenende, bize noýba (obýekt) bermegini we haýsy obýekt synpynyň gerekdigini görkezmegini haýyş edýäris (bu ýerde, diňe bir synplary däl, eýsem interfeýsleri hem görkezip bilersiňiz). Şondan soň Bahar bu synpyň obýektini bize üýtgeýjä ýazdyrýar. Soň bolsa, Bahardan bize “it” diýilýän noýba almagyny soraýarys. Bahar synp obýektini döredeninde, Dogobýektiň synpynyň ady bolan kiçijik harp bilen adaty bir at berer (eger döredilen noýba ady aç-açan görkezilmedik bolsa). Şonuň üçin synpymyz diýilýändigi sebäpli Dogşeýle noýbanyň ady “it” bolar. Şol ýerde bir obýektimiz bar bolsa BufferedReader, Bahar oňa "bufferedReader" adyny bererdi. Bu ýagdaýda (Java-da) şunuň ýaly obýektiň haýsy synpda boljakdygy barada takyk takyklyk ýok, şonuň üçin el bilen Objectzerur görnüşe el bilen atýan belli bir zat yzyna gaýtarylýar Dog. Synpy aç-açan görkezýän wariant has amatly. Üçünji ýagdaýda, synp we ady boýunça noýba alýarys. Kontekstde bir synpyň birnäçe noýbasy boljak bir ýagdaý bolup biler we haýsy aýratyn noýba gerekdigini görkezmek üçin adyny görkezýäris. Bu ýerde synpy hem açyk görkezendigimiz üçin, indi kast etmeli däl. Möhüm!Baharyň kesgitlän talaplarymyza laýyklykda birnäçe noýba tapýandygy ýüze çyksa, haýsy noýba bermelidigini kesgitläp bilmez we kadadan çykma eder. Şonuň üçin şeýle ýagdaýlar ýüze çykmazlygy üçin oňa haýsy binanyň gerekdigini mümkin boldugyça takyk görkezmäge synanyşyň. Springaz, şertleriňize görä kontekstinde ýekeje noýba tapmasa, bu hem kadadan çykma bolar. Onda, haýwanlaryň atlaryny ekranda görkezýäris, bularyň hakykatdanam bize zerur zatlardygyna göz ýetirmek üçin. Nowöne indi programmany işledip görsek, Baharyň öz çäginde zerur haýwanlary tapyp bilmejekdigine ant içýändigini göreris. Bu noýba döretmändigi sebäpli boldy. Öň hem aýdyşym ýaly, Bahar sapaklary gözden geçirende, ol ýerde “bahar” belliklerini gözleýär. Eger tapmasa, noýba döretmeli sapaklary ýaly synplary kabul etmeýär. @ComponentMuny düzetmek üçin haýwan synplarymyzda synpyň öňünde düşündiriş goşuň .
@Component
public class Cat {
	private String name = "Barsik";
	...
}
Emma bu hemmesi däl. Bahara bu synp üçin noýbanyň belli bir adynyň bolmalydygyny aç-açan görkezmeli bolsak, bu at düşündirişden soň gabygyň içinde görkezilip bilner. parrot-keshaMysal üçin, Baharyň kepderi noýbasyna zerur adyny bermegi üçin , mainsoňundan bu towukdan alarys, şuňa meňzeş bir zat etmeli:
@Component("parrot-kesha")
public class Parrot {
	private String name = "Kesha";
	...
}
Bu awtomatiki konfigurasiýanyň ähli nokady . Sapaklaryňyzy ýazýarsyňyz, zerur düşündirişler bilen bellärsiňiz we Baharyňyza sapaklaryňyz bilen bukjany görkezýärsiňiz, şol ýazgylar gözlenýär we şeýle synplaryň obýektlerini döredýär. @ComponentTheeri gelende aýtsak, Bahar diňe bir düşündirişleri däl , eýsem bu miras galan beýleki bellikleri hem gözlär . Mysal üçin ,,, @Controllerwe beýlekiler , indiki makalalarda duşuşarys @RestController. Indi edil şonuň ýaly etmäge synanyşalyň, ýöne java konfigurasiýasyny ulanyp . Ilki bilen synplarymyzdan bellikleri aýyralyň . Bu meseläni çylşyrymlaşdyrmak üçin, bularyň öz-özümiz ýazan sapaklarymyz däldigini göz öňüne getireliň, aňsatlyk bilen üýtgedip, düşündiriş goşup, bir zat goşup bileris. Bu sapaklar käbir kitaphanada ýerleşdirilen ýaly. Bu ýagdaýda, bu synplary Bahar tarapyndan kabul edilmegi üçin hiç hili redaktirläp bilmeris. Emma bize bu synplaryň obýektleri gerek! Bu ýerde şeýle zatlary döretmek üçin java konfigurasiýasy gerek bolar. Ilki bilen, mysal üçin bir paket döredeliň we onda - mysal üçin adaty Java synpy we bellik bilen belläliň!@Service@Repository@ComponentconfigsMyConfig@Configuration
@Configuration
public class MyConfig {
}
main()Indi usuldaky konteksti döretmegiň usulyny azajyk üýtgetmeli . Şol ýerde konfigurasiýa bilen synpymyzy gönüden-göni kesgitläp bileris:
ApplicationContext context =
	new AnnotationConfigApplicationContext(MyConfig.class);
Fasulye döredýän birnäçe dürli synpymyz bar bolsa we birbada birnäçesini birikdirmek isleýän bolsak, olary diňe dykgat bilen bölünenini görkezýäris:
ApplicationContext context =
	new AnnotationConfigApplicationContext(MyConfig.class, MyAnotherConfig.class);
Dogrusy, bizde gaty köp bolsa we hemmesini birbada birikdirmek islesek, diňe şu ýerdäki bukjanyň adyny görkezýäris:
ApplicationContext context =
	new AnnotationConfigApplicationContext("ru.javarush.info.fatfaggy.animals.configs");
Bu ýagdaýda Bahar bu bukjanyň içinden geçer we düşündiriş bilen bellenen ähli synplary tapar @Configuration. Dogrusy, konfigurasiýalar dürli paketlere bölünen hakykatdanam uly bir programma bar bolsa, paketleriň atlaryny dykgat bilen bölünen konfigurasiýa bilen görkezýäris:
ApplicationContext context =
	new AnnotationConfigApplicationContext("ru.javarush.info.fatfaggy.animals.database.configs",
		"ru.javarush.info.fatfaggy.animals.root.configs",
		"ru.javarush.info.fatfaggy.animals.web.configs");
Bolýar, ýa-da olaryň hemmesine has ýygy bolan bukjanyň ady:
ApplicationContext context =
	new AnnotationConfigApplicationContext("ru.javarush.info.fatfaggy.animals");
Isleýşiňiz ýaly edip bilersiňiz, ýöne meniň pikirimçe, sazlamalar bilen synpy kesgitlän ilkinji wariantyňyz biziň programmamyza laýyk geler. Kontekst döredilende, Bahar düşündiriş bilen bellenen synplary gözlär @Configurationwe bu synplaryň obýektlerini döreder. Ondan soň, bu synplarda düşündiriş bilen bellenilen usullary çagyrmaga synanyşar @Bean, bu usullar eýýäm kontekstinde ýerleşdiren noýba (zatlary) yzyna gaýtarar. Bolýar, indi java konfigurasiýasy bilen synpymyzda pişik, it we towuk noýbasyny döredeliň. Bu gaty ýönekeý:
@Bean
public Cat getCat() {
	return new Cat();
}
Görnüşi ýaly, pişigimizi el bilen döredip, Bahara berdik, ol eýýäm bu zatlarymyzy öz kontekstinde ýerleşdirdi. Fasulymyzyň adyny aç-açan kesgitlemändigimiz sebäpli, Bahar noýba usulynyň ady bilen birmeňzeş at berer. Biziň ýagdaýymyzda, pişigiň noýbasynda "" getCat"ady bolar. -Öne-de mainbiz henizem pişigi ady bilen däl-de, synp boýunça alýarys, bu ýagdaýda bu binanyň ady biziň üçin möhüm däl. Edil şonuň ýaly it bilen noýba ýasaýyň, ýöne baharyň usulyň adyna şeýle noýba dakjakdygyny ýadyňyzdan çykarmaň. Fasulymyzy towuk bilen aç-açan atlandyrmak üçin, düşündirişden soň adyny gabygyň içinde görkeziň @Bean:
@Bean("parrot-kesha")
public Object weNeedMoreParrots() {
	return new Parrot();
}
Görşüňiz ýaly, bu ýerde yzyna gaýtaryş bahasynyň görnüşini görkezdim Objectwe usuly asla bir zat diýip atlandyrdym. Bu noýbanyň adyna hiç hili täsir etmeýär, sebäbi bu ýerde aç-açan goýýarys. Returnöne yzyna gaýtaryş bahasynyň görnüşini we usulynyň adyny gökden däl-de, has düşnükli görkezmek has gowudyr. Bir ýylda bu taslamany açanyňyzda diňe özüňiz üçin. :) Indi bir noýba döretmek üçin başga bir noýba ulanmaly bir ýagdaýa seredeliň . Mysal üçin, pişik noýbasyndaky pişigiň adynyň tutujynyň adyndan we "-killer" setirinden bolmagyny isleýäris. Mesele ýok!
@Bean
public Cat getCat(Parrot parrot) {
	Cat cat = new Cat();
	cat.setName(parrot.getName() + "-killer");
	return cat;
}
Bu ýerde Bahar bu noýba döretmezden ozal döredilen towuk noýbasyny şu ýere geçirmelidigini görer. Şol sebäpden, ilki bilen towuk ýasamagyň usuly diýlip atlandyrylar we soňra bu tutujyny pişik döretmek usulyna geçirer ýaly, usullarymyza çagyryşlar zynjyry gurar. Baglylyk sanjymy diýilýän zat şu ýerde işledi : Baharyň özi gerekli towuk noýbasyny usulymyza geçirdi. Pikir üýtgeýjiden zeýrenýän bolsa , towşan döretmek parrotusulyndaky gaýdyp beriş görnüşini üýtgetmegi ýatdan çykarmaň . Mundan başga-da, Java konfigurasiýasy noýba döretmek usullarynda düýbünden islendik Java koduny ýerine ýetirmäge mümkinçilik berýär . Siz hakykatdanam islendik zady edip bilersiňiz: beýleki kömekçi obýektleri dörediň, başga usullara jaň ediň, hatda bahar ýazgylary bilen bellik edilmedikleri, aýlawlary, şertleri düzüň - kelläňize gelen zat! Bularyň hemmesine xml sazlamalaryny ulanyp, awtomatiki konfigurasiýa ulanyp bolmaz. ObjectParrot Indi has gyzykly meselä seredeliň. Polimorfizm we interfeýsler bilen :) Geliň , interfeýs döredeliň WeekDaywe bu interfeýsi durmuşa geçirjek 7 synp döredeliň : ,,,,,, . Geliň, interfeýsde degişli synp hepdesiniň gününiň adyny yzyna gaýtaryp berýän usul döredeliň. .Agny, synp gaýdyp gelerdi " " we ş.m. Programmamyzy işe girizenimizde, hepdäniň şu gününe laýyk gelýän kontekstde noýba goýmakdygyny aýdalyň. Interfeýsi amala aşyrýan ähli synplaryň noýbasy däl , diňe bize gerek. Munuň ýaly bir zat edip bolar: MondayTuesdayWednesdayThursdayFridaySaturdaySundayString getWeekDayName()MondaymondayWeekDay
@Bean
public WeekDay getDay() {
	DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
	switch (dayOfWeek) {
		case MONDAY: return new Monday();
		case TUESDAY: return new Tuesday();
		case WEDNESDAY: return new Wednesday();
		case THURSDAY: return new Thursday();
		case FRIDAY: return new Friday();
		case SATURDAY: return new Saturday();
		default: return new Sunday();
	}
}
Bu ýerde yzyna gaýtaryş bahasy görnüşi biziň interfeýsimizdir we usul hepdäniň häzirki gününe baglylykda interfeýs ýerine ýetiriş synplarynyň hakyky obýektlerini yzyna gaýtaryp berýär. Indi usulda main()muny edip bileris:
WeekDay weekDay = context.getBean(WeekDay.class);
System.out.println("It's " + weekDay.getWeekDayName() + " today!");
Maňa şu gün ýekşenbe diýdiler :) Ertir programmany işledsem, kontekstde düýbünden başga bir zadyň peýda boljakdygyna ynanýaryn. Fasuly diňe interfeýs arkaly alýandygymyzy ýadyňyzdan çykarmaň : context.getBean(WeekDay.class). Bahar, noýbasynyň haýsysynyň şeýle interfeýsi durmuşa geçirýändigini we yzyna gaýtaryp berjekdigini görmek üçin kontekstine sereder. WeekDayOnda, üýtgeýän görnüşde bir obýektiň bardygy ýüze çykýar Sundaywe hemmämize eýýäm mälim bolan polimorfizm bu üýtgeýji bilen işlän wagty başlaýar. :) We noýbalaryň käbiri Baharyň özi tarapyndan döredilýär, düşündirişli synplaryň bolmagy üçin paketleri skanirlemek @Componentwe java konfigurasiýasy arkaly käbir beýleki noýbalar döredilýär. Munuň üçin sapaklara we düşündiriş bilen bellenen wagty Cat, asyl nusgasyna gaýdyp geleliň . Geliň, bahar paslynda bukjany awtomatiki skanirlemek arkaly haýwanlarymyz üçin gaplar döretmek isleýäris , ýöne hepdäniň güni ýaly edişimiz ýaly gap ýasaýarys. Siziň etmeli zadyňyz , birinji düşündirişde kontekst döredilende kesgitleýän synp derejesinde goşmak we skanirlenmeli bukjany we awtomatiki usulda döredilen zerur synplaryň noýbasyny görkezmek: DogParrot@ComponententitiesMyConfigmain@ComponentScan
@Configuration
@ComponentScan("ru.javarush.info.fatfaggy.animals.entities")
public class MyConfig {
	@Bean
	public WeekDay getDay() {
		DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
		switch (dayOfWeek) {
			case MONDAY: return new Monday();
			case TUESDAY: return new Tuesday();
			case WEDNESDAY: return new Wednesday();
			case THURSDAY: return new Thursday();
			case FRIDAY: return new Friday();
			case SATURDAY: return new Saturday();
			default: return new Sunday();
		}
	}
}
Görnüşi ýaly, Bahar kontekst döredilende synpy gaýtadan işlemelidigini görýär MyConfig. Oňa girýär we "" bukjany skanirlemelidigini ru.javarush.info.fatfaggy.animals.entitieswe şol synplaryň noýbasyny döretmelidigini görýär, şondan soň usuly getDay()synpdan ýerine ýetirýär MyConfigwe görnüşine noýba görnüşini goşýar WeekDay. Usulda, main()indi zerur bolan noýbalaryň hemmesine elýeterli bolýarys: haýwan zatlary we noýba hepdäniň güni bilen. Baharyň käbir xml sazlamalaryny hem alýandygyna nädip göz ýetirmeli - zerur bolsa ony internetde google-dan alyň :) Gysgaça mazmun:
  • awtomatiki konfigurasiýany ulanmaga synanyşyň;
  • awtomatiki konfigurasiýa wagtynda, noýba döredilmeli synplary öz içine alýan bukjanyň adyny görkezýäris;
  • şular ýaly synplar düşündiriş bilen bellenýär@Component;
  • bahar şeýle synplaryň hemmesinden geçýär we obýektlerini döredýär we kontekstde ýerleşdirýär;
  • awtomatiki konfigurasiýa haýsydyr bir sebäbe laýyk gelmese, java konfigurasiýasyny ulanýarys;
  • bu ýagdaýda, adaty Java synpyny döredýäris, usullary zerur zatlary yzyna gaýtaryp berer we @Configurationkontekst döredilende konfigurasiýa bilen belli bir synpy kesgitlemän, tutuş bukjany skanerden geçirenimizde, şeýle synpy bellik bilen belläris;
  • noýba gaýdýan bu synpyň usullary düşündiriş bilen bellenýär @Bean;
  • java konfigurasiýasyny ulananymyzda awtomatiki skanirlemegi işjeňleşdirmek islesek, düşündiriş ulanýarys @ComponentScan.
Hiç zat düşnüksiz bolsa, bu makalany bir-iki günüň içinde okap görüň. Garaz, ýa-da Jawaraşyň irki derejesinde bolsaňyz, belki bahary öwrenmek üçin biraz irdir. Java-da programmirlemäge has ynamly duýsaňyz, bu makala hemişe biraz soň dolanyp bilersiňiz. Everythinghli zat düşnükli bolsa, haýwanlaryňyzyň käbir taslamalaryny Bahara geçirmäge synanyşyp bilersiňiz :) Bir zat düşnükli, ýöne bir zat kän däl bolsa, teswir ýazmagyňyzy haýyş edýärin :) Bir ýere ädim ätsem ýa-da samsyk bir zat ýazsam teklipler we teswirler bar ) Indiki makalada bahar-web-mvc-ä çuňňur çümüp , bahary ulanyp ýönekeý web programmasy ederis.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION