JavaRush /Блоги Java /Random-TG /Баҳор барои танбалҳост. Асосҳо, мафҳумҳои асосӣ ва мисолҳ...
Стас Пасинков
Сатҳи
Киев

Баҳор барои танбалҳост. Асосҳо, мафҳумҳои асосӣ ва мисолҳо бо код. Қисми 2

Дар гурӯҳ нашр шудааст
Дар мақолаи охирин , ман ба таври мухтасар шарҳ додам, ки баҳор чист, қуттиҳо чист ва контекст. Акнун вақти он расидааст, ки ҳама чиз чӣ гуна кор мекунад. Баҳор барои танбалҳост.  Асосҳо, мафҳумҳои асосӣ ва мисолҳо бо code.  Қисми 2 - 1Ман инро худам дар Intellij Idea Enterprise Edition иҷро мекунам. Аммо ҳамаи мисолҳои ман бояд дар нашри ройгони Community Intellij Idea низ кор кунанд. Танҳо агар шумо дар скриншотҳо бинед, ки ман як намуди тиреза дорам, ки шумо надоред, хавотир нашавед, ин барои ин лоиҳа муҳим нест :) Аввалан, биёед лоиҳаи холии Maven эҷод кунем. Ман дар мақола нишон додам, ки чӣ тавр ин корро кардан лозим аст (то он вақт бихонед: " Вақти табдил додани лоиҳаи мавени мо ба як лоиҳаи веб аст. ", пас аз он аллакай нишон медиҳад, ки чӣ тавр сохтани лоиҳаи веб ва мо ҳоло ба ин ниёз надорем) Биёед онро дар папкаи src/main /java эҷод кунем (дар ҳолати ман ман онро "" номидаам ru.javarush.info.fatfaggy.animals, шумо метавонед онро ҳар чизе ки мехоҳед, номгузорӣ кунед, танҳо фаромӯш накунед, ки онро бо номи худ дар ҷойҳои мувофиқ иваз кунед). Ва биёед як синфе созем, Mainки дар он мо методе созем
public static void main(String[] args) {
    ...
}
Пас файли pom.xml -ро кушоед ва дар он ҷо қисмат илова кунед dependencies. Ҳоло мо ба анбори Maven меравем ва контексти баҳори versionи охирини устуворро дар он ҷо меҷӯем ва он чизеро, ки дар дохor қисмат гирифтаем, часбонем dependencies. Ман ин равандро дар ин мақола каме муфассал тавсиф кардам (нигаред ба фасли " Пайваст кардани вобастагӣ дар Maven "). Он гоҳ худи Maven вобастагии заруриро пайдо ва зеркашӣ мекунад ва дар ниҳоят шумо бояд чунин чизе ба даст оред:
Баҳор барои танбалҳост.  Асосҳо, мафҳумҳои асосӣ ва мисолҳо бо code.  Қисми 2 - 2
Дар равзанаи чап шумо сохтори лоиҳаро бо баста ва синф мебинед Main. Равзанаи миёна нишон медиҳад, ки pom.xml-и ман чӣ гуна аст. Ман инчунин як бахши хосиятҳоро дар он ҷо илова кардам , ки дар он ман ба Maven нишон додам, ки ман кадом versionи Java-ро дар codeи сарчашма истифода мебарам ва кадом versionи онро тартиб додан лозим аст. Ин танҳо барои он аст, ки ҳангоми оғоз кардани он, ки versionи кӯҳнаи Java истифода мешавад, ман фикри огоҳиро нафаҳмам. Шумо ин корро карда метавонед, шумо наметавонед) Дар равзанаи рост - шумо мебинед, ки гарчанде ки мо танҳо контексти баҳорро пайваст кардем - он ба таври худкор ядро, лӯбиё, aop ва ифодаро илова кард. Ҳар як модулро алоҳида пайваст кардан мумкин буд, вобастагӣ дар хотира барои ҳар як бо нишон додани versionи возеҳ сабт карда мешавад, аммо ҳоло мо аз вариант қаноатмандем, ки ҳоло аст. Акнун биёед бастаеро entities(an objectҳоро) созем ва дар он 3 синф эҷод кунем: Cat, Dog, Parrot. Бигзор ҳар як ҳайвон ном дошта бошад ( private String name, шумо метавонед дар он ҷо баъзе арзишҳоро рамзгузорӣ кунед) ва гирандагон/танзимкунандагон оммавӣ мебошанд. Акнун ба синф равед Mainва main()дар усул чунин чизе нависед:
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());
}
Аввалан, мо an objectи контекстӣ эҷод мекунем ва дар конструктор ба он номи бастаеро медиҳем, ки барои мавҷудияти лӯбиёҳо скан кардан лозим аст. Яъне, Баҳор аз ин баста мегузарад ва кӯшиш мекунад, ки синфҳоеро пайдо кунад, ки бо эзоҳҳои махсус қайд карда шудаанд, ки Баҳор медонанд, ки ин лӯбиё аст. Пас аз он, он an objectҳои ин синфҳоро эҷод мекунад ва онҳоро дар контексти худ ҷойгир мекунад. Пас аз он мо аз ин замина гурба мегирем. Ҳангоми муроҷиат ба an objectи контекстӣ мо аз он хоҳиш мекунем, ки ба мо як лӯбиё (an object) диҳад ва нишон диҳад, ки ба мо кадом синфи an object лозим аст (дар ин ҷо, дар омади гап, шумо метавонед на танҳо синфҳо, балки интерфейсҳоро низ муайян кунед). Пас аз он Spring як an objectи ин синфро ба мо бармегардонад, ки мо онро ба тағирёбанда захира мекунем. Баъдан мо аз Баҳор хоҳиш мекунем, ки ба мо лӯбиёи «саг» бигирад. Вақте ки Spring an objectи синфро эҷод мекунад, Dogон ба он номи стандартӣ медиҳад (агар номи лӯбиёи сохташаванда ба таври возеҳ нишон дода нашавад), ки номи синфи an object аст, танҳо бо ҳарфи хурд. Аз ин рӯ, азбаски синфи мо ном дорад Dog, номи чунин лӯбиё "саг" хоҳад буд. Агар мо дар он ҷо an object дошта бошем BufferedReader, баҳор ба он номи пешфарзро "bufferedReader" медод. Ва азбаски дар ин ҳолат (дар Java) итминони дақиқе дар бораи кадом синф будани чунин an object вуҷуд надорад, он танҳо як an objectи муайянро бармегардонад Object, ки мо онро ба таври дастӣ ба навъи лозимаи мо меандозем Dog. Варианти бо нишон додани возеҳ синф қулайтар аст. Хуб, дар ҳолати сеюм, мо аз рӯи синф ва ном лӯбиё мегирем. Шояд танҳо вазъияте вуҷуд дошта бошад, ки дар контекст якчанд лӯбиёи як синф мавҷуд аст ва барои нишон додани он, ки кадом лӯбиёи мушаххас ба мо лозим аст, мо номи онро нишон медиҳем. Азбаски мо дар ин ҷо синфро низ ба таври возеҳ нишон додем, мо дигар набояд партофтем. Муҳим!Агар маълум шавад, ки Баҳор мувофиқи талаботе, ки мо ба ӯ дода будем, якчанд лӯбиё пайдо мекунад, муайян карда наметавонад, ки кадом лӯбиёро ба мо медиҳад ва истисно мекунад. Аз ин рӯ, кӯшиш кунед, ки ба ӯ то ҳадди имкон дақиқ нишон диҳед, ки кадом қуттии шумо лозим аст, то ки чунин ҳолатҳо ба вуҷуд наоянд. Агар баҳор мувофиқи шароити шумо дар контексти худ як лӯбиё наёбад, он низ истисно хоҳад кард. Хуб, пас мо танҳо номҳои ҳайвоноти худро дар экран нишон медиҳем, то боварӣ ҳосил кунем, ки инҳо воқеан an objectҳое ҳастанд, ки ба мо лозиманд. Аммо агар мо ҳоло барномаро иҷро кунем, мебинем, ки Баҳор савганд мехӯрад, ки ҳайвоноти лозимаро дар заминаи худ пайдо карда наметавонад. Ин аз он сабаб рӯй дод, ки ӯ ин лӯбиёҳоро наофаридааст. Тавре ки ман аллакай гуфтам, вақте ки Баҳор дарсҳоро скан мекунад, он ҷо эзоҳҳои "баҳори худро" меҷӯяд. Ва агар онро наёбад, пас он чунин синфҳоро ба монанди онҳое, ки лӯбиёи онҳоро бояд эҷод кунад, қабул намекунад. Барои ислоҳ кардани ин, танҳо як эзоҳро @Componentдар пеши синф дар синфҳои ҳайвоноти мо илова кунед.
@Component
public class Cat {
	private String name = "Barsik";
	...
}
Аммо ин ҳама нест. Агар мо бояд ба Баҳор возеҳ нишон диҳем, ки лӯбиёи ин синф бояд номи мушаххас дошта бошад, пас ин номро дар қавс пас аз эзоҳ нишон додан мумкин аст. Масалан, барои он ки баҳор ба parrot-keshaлӯбиёи тӯтиӣ, ки mainбаъдтар аз он ин тӯтӣ мегирем, ном гузорад, мо бояд чунин кор кунем:
@Component("parrot-kesha")
public class Parrot {
	private String name = "Kesha";
	...
}
Ин тамоми нуқтаи конфигуратсияи автоматӣ аст . Шумо дарсҳои худро менависед, онҳоро бо эзоҳҳои зарурӣ қайд мекунед ва ба Spring бастаеро бо синфҳои худ нишон медиҳед, ки тавассути он вай шарҳҳоро меҷӯяд ва an objectҳои чунин синфҳоро месозад. Воқеан, Баҳор на танҳо эзоҳҳо @Component, балки ҳама эзоҳҳои дигареро, ки аз ин ба мерос гирифта шудаанд, ҷустуҷӯ хоҳад кард. Масалан, @Controller, @RestController, @Service, @Repositoryва дигарон, ки мо дар мақолаҳои минбаъда вомехӯрем. Акнун биёед кӯшиш кунем, ки ҳамин корро кунем, аммо бо истифода аз конфигуратсияи java . Аввалан, биёед шарҳҳоро @Componentаз синфҳои худ хориҷ кунем. Барои мураккаб кардани вазифа, биёед тасаввур кунем, ки ин синфҳои худи мо нестанд, ки мо метавонем онҳоро ба осонӣ тағир диҳем, чизе илова кунем, аз ҷумла эзоҳҳо. Гӯё ин синфҳо дар ягон китобхона ҷамъ шудаанд. Дар ин ҳолат, мо наметавонем ин синфҳоро ба ҳеҷ ваҷҳ таҳрир кунем, то онҳо то баҳор қабул карда шаванд. Аммо ба мо an objectҳои ин синфҳо лозиманд! Дар ин ҷо барои сохтани чунин an objectҳо ба мо конфигуратсияи java лозим мешавад. Барои оғоз, биёед бастаеро эҷод кунем, масалан configs, ва дар он - синфи муқаррарии Java, масалан, MyConfigва онро бо эзоҳ қайд кунед@Configuration
@Configuration
public class MyConfig {
}
Ҳоло мо бояд main()тарзи эҷоди контекстро дар усул каме тағир диҳем. Мо метавонем бевосита синфи худро бо конфигуратсия дар он ҷо муайян кунем:
ApplicationContext context =
	new AnnotationConfigApplicationContext(MyConfig.class);
Агар мо якчанд синфҳои гуногун дошта бошем, ки дар он лӯбиёҳо эҷод мекунем ва мо мехоҳем, ки якчанд онҳоро якбора пайваст кунем, мо онҳоро танҳо бо вергул ҷудо карда нишон медиҳем:
ApplicationContext context =
	new AnnotationConfigApplicationContext(MyConfig.class, MyAnotherConfig.class);
Хуб, агар мо шумораи онҳо аз ҳад зиёд дошта бошем ва мо мехоҳем, ки онҳоро якбора пайваст кунем, мо танҳо номи бастаеро, ки дар он дорем, нишон медиҳем:
ApplicationContext context =
	new AnnotationConfigApplicationContext("ru.javarush.info.fatfaggy.animals.configs");
Дар ин ҳолат, Баҳор аз ин баста мегузарад ва ҳамаи синфҳоеро, ки бо эзоҳ нишон дода шудаанд, пайдо мекунад @Configuration. Хуб, агар мо як барномаи воқеан калон дошта бошем, ки конфигуратсияҳо ба бастаҳои гуногун тақсим мешаванд, мо танҳо номи бастаҳоро бо конфигуратсияҳо бо вергул ҷудо мекунем:
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");
Хуб, ё номи бастае, ки барои ҳамаи онҳо маъмултар аст:
ApplicationContext context =
	new AnnotationConfigApplicationContext("ru.javarush.info.fatfaggy.animals");
Шумо метавонед ин корро тавре ки мехоҳед, иҷро кунед, аммо ба назари ман, варианти аввал, ки дар он шумо танҳо синфро бо конфигуратсияҳо муайян мекунед, ба барномаи мо мувофиқтар хоҳад буд. Ҳангоми сохтани контекст, Spring он синфҳоеро ҷустуҷӯ мекунад, ки бо эзоҳ нишон дода шудаанд @Configurationва дар худ an objectҳои ин синфҳоро эҷод мекунанд. Пас аз он, он кӯшиш мекунад, ки усулҳоро дар ин синфҳо, ки бо эзоҳ нишон дода шудаанд, даъват кунад, @Beanки ин маънои онро дорад, ки чунин усулҳо лӯбиёҳоро (an objectҳоро), ки аллакай дар контексти худ ҷойгир кардаанд, бармегардонанд. Хуб, биёед дар синфи худ бо конфигуратсияи java лӯбиёи гурба, саг ва тӯтиӣ эҷод кунем. Ин хеле содда анҷом дода мешавад:
@Bean
public Cat getCat() {
	return new Cat();
}
Маълум мешавад, ки мо гурбаамонро дастӣ офарида, ба Баҳор додем ва ӯ аллакай ин an objectи моро дар контексти худ ҷойгир кардааст. Азбаски мо номи лӯбиёи худро ба таври возеҳ муайян накардаем, Баҳор ба лӯбиё ҳамон номро бо номи усул медиҳад. Дар ҳолати мо, лӯбиёи гурба номи " getCat" хоҳад дошт. Аммо азбаски дар main-e мо то ҳол гурбаро на бо ном, балки аз рӯи синф мегирем, пас дар ин ҳолат номи ин бин барои мо муҳим нест. Бо саг як лӯбиёро низ ҳамин тавр созед, аммо дар хотир доред, ки Баҳор чунин лӯбиёро бо номи усул номгузорӣ мекунад. Барои ба таври возеҳ ном бурдани лӯбиёи мо бо тӯтиӣ, танҳо номи онро дар қавс пас аз эзоҳ нишон диҳед @Bean:
@Bean("parrot-kesha")
public Object weNeedMoreParrots() {
	return new Parrot();
}
Тавре ки шумо мебинед, дар ин ҷо ман намуди арзиши бозгаштро нишон додам Objectва усулро умуман чизе номидам. Ин ба ҳеҷ ваҷҳ ба номи лӯбиё таъсир намерасонад, зеро мо онро ба таври возеҳ дар ин ҷо гузоштаем. Аммо беҳтар аст, ки навъи арзиши бозгашт ва номи усулро на аз кабуд, балки бештар ё камтар равшан нишон диҳед. Танҳо барои худ, вақте ки шумо ин лоиҳаро дар як сол мекушоед. :) Акнун биёед вазъиятеро дида бароем, ки барои сохтани як лӯбиё мо бояд лӯбиёи дигарро истифода барем . Масалан, мо мехоҳем, ки номи гурба дар лӯбиёи гурба аз номи тӯтӣ ва сатри "-killer" иборат бошад. Масъалае нест!
@Bean
public Cat getCat(Parrot parrot) {
	Cat cat = new Cat();
	cat.setName(parrot.getName() + "-killer");
	return cat;
}
Дар ин ҷо Баҳор мебинад, ки пеш аз сохтани ин лӯбиё ба ӯ лозим меояд, ки лӯбиёи тӯтиии аллакай сохташударо ба ин ҷо интиқол диҳад. Аз ин рӯ, вай як занҷири зангҳоро ба усулҳои мо месозад, то усули сохтани тӯтӣ аввал номида шавад ва баъд ин тӯтӣ ба усули сохтани гурба мегузарад. Дар ин ҷо чизе, ки тазриқи вобастагӣ ном дошт, кор мекард : Худи баҳор лӯбиёи лозимии тӯтӣ ба усули мо гузашт. Агар идея дар бораи тағирёбанда шикоят кунад parrot, фаромӯш накунед, ки намуди бозгаштро дар усули сохтани тӯтӣ аз Objectба Parrot. Илова бар ин, конфигуратсияи Java ба шумо имкон медиҳад, ки комилан ҳама гуна рамзи Java-ро дар усулҳои эҷоди лӯбиё иҷро кунед. Шумо воқеан ҳама чизро карда метавонед: дигар an objectҳои ёрирасон эҷод кунед, ба ҳама усулҳои дигар занг занед, ҳатто онҳое, ки бо эзоҳҳои баҳорӣ ишора нашудаанд, ҳалқаҳо созед, шартҳо - ҳар чизе ки ба хотир меояд! Ҳамаи инро бо истифода аз конфигуратсияи автоматӣ ба даст овардан мумкин нест, камтар бо истифода аз конфигуратсияҳои xml. Акнун биёед ба як масъалаи ҷолибтар назар андозем. Бо полиморфизм ва интерфейсҳо :) Биёед интерфейс эҷод кунем WeekDayва 7 синферо созем, ки ин интерфейсро амалӣ мекунанд: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday. Биёед дар интерфейс усулеро созем String getWeekDayName(), ки номи рӯзи ҳафтаи синфи мувофиқро баргардонад. Яъне, синф Mondayбармегардад " monday", ва ғайра. Биёед бигӯем, ки вазифа ҳангоми оғози барномаи мо ин ҷойгир кардани лӯбиё дар контекстест, ки ба рӯзи ҷории ҳафта мувофиқат кунад. На ҳама лӯбиёҳои ҳама синфҳо, ки WeekDayинтерфейсро амалӣ мекунанд, балки танҳо якест, ки ба мо лозим аст. Онро метавон чунин кор кард:
@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();
	}
}
Дар ин ҷо навъи арзиши бозгашт интерфейси мост ва усул an objectҳои воқеии синфҳои татбиқи интерфейсро вобаста ба рӯзи ҷории ҳафта бармегардонад. Ҳоло дар усул main()мо метавонем ин корро кунем:
WeekDay weekDay = context.getBean(WeekDay.class);
System.out.println("It's " + weekDay.getWeekDayName() + " today!");
Он ба ман гуфт, ки имрӯз якшанбе аст :) Ман боварӣ дорам, ки агар ман фардо барномаро иҷро кунам, дар контекст an objectи тамоман дигар пайдо мешавад. Лутфан қайд кунед, ки дар ин ҷо мо лӯбиёро танҳо тавассути интерфейс мегирем: context.getBean(WeekDay.class). Баҳор ба контексти худ назар мекунад, то бубинад, ки кадоме аз лӯбиёи он чунин интерфейсро амалӣ мекунад ва онро бармегардонад. Хуб, он гоҳ маълум мешавад, ки WeekDayan objectи навъи дар як тағирёбандаи type ба итмом мерасад Sundayва полиморфизм, ки аллакай барои ҳамаи мо шинос аст, ҳангоми кор бо ин тағирёбанда оғоз меёбад. :) Ва чанд сухан дар бораи равиши омехта , ки дар он баъзе аз лӯбиёҳоро худи Баҳор бо истифода аз сканкунии бастаҳо барои мавҷудияти синфҳо бо эзоҳ @Componentва баъзе лӯбиёҳои дигар бо истифода аз конфигуратсияи java сохта мешаванд. Барои ин, биёед ба нусхаи аслӣ баргардем, вақте ки дарсҳо Cat, Dogва Parrotбо эзоҳ қайд карда шуданд @Component. Биёед бигӯем, ки мо мехоҳем барои ҳайвоноти худ бо истифода аз сканкунии автоматии баста entitiesто баҳор қуттиҳо созем, аммо ҳамон тавре ки мо анҷом додем, қуттиҳоро бо рӯзи ҳафта созем. Ба шумо танҳо лозим аст, ки дар сатҳи синф илова кунед MyConfig, ки мо онро ҳангоми эҷоди контекст дар mainшарҳи -ум муайян @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();
		}
	}
}
Маълум мешавад, ки ҳангоми сохтани контекст, Баҳор мебинад, ки вай бояд синфро коркард кунад MyConfig. Вай ба он дохил мешавад ва мебинад, ки ба ӯ лозим аст, ки бастаи " ru.javarush.info.fatfaggy.animals.entities" скан кунад ва лӯбиёҳои он синфҳоро созад, пас аз он ӯ методеро getDay()аз синф иҷро мекунад MyConfigва лӯбиёи навъи онро WeekDayба контексти худ илова мекунад. Дар ин усул, main()мо ҳоло ба ҳама лӯбиёи лозима дастрасӣ дорем: ҳам an objectҳои ҳайвонот ва ҳам рӯзи лӯбиёи ҳафта. Чӣ тавр боварӣ ҳосил кардан мумкин аст, ки Баҳор низ баъзе конфигуратсияҳои xml-ро мегирад - агар ба шумо лозим бошад, онро худатон дар Интернет google кунед :) Хулоса:
  • кӯшиш кунед, ки конфигуратсияи автоматиро истифода баред;
  • ҳангоми конфигуратсияи автоматӣ, мо номи бастаеро, ки дорои синфҳое мебошанд, нишон медиҳем, ки лӯбиёи онҳо бояд эҷод карда шаванд;
  • ин гуна синфхо бо annotation кайд карда мешаванд@Component;
  • баҳор аз ҳамаи ин гуна синфҳо мегузарад ва an objectҳои онҳоро месозад ва онҳоро дар контекст ҷойгир мекунад;
  • агар конфигуратсияи автоматӣ бо ягон сабаб ба мо мувофиқ наояд, мо конфигуратсияи javaро истифода мебарем;
  • дар ин ҳолат, мо як синфи муқаррарии Java эҷод мекунем, ки усулҳои он an objectҳои ба мо лозимиро бармегардонанд ва @Configurationдар сурати скан кардани тамоми баста ба ҷои муайян кардани синфи мушаххас бо конфигуратсия ҳангоми сохтани контекст чунин синфро бо эзоҳ қайд кунед;
  • усулҳои ин синф, ки лӯбиёро бармегардонанд, бо эзоҳ қайд карда мешаванд @Bean;
  • агар мо хоҳем, ки сканкунии автоматиро ҳангоми истифодаи конфигуратсияи java фаъол созем, мо эзоҳро истифода мебарем @ComponentScan.
Агар ҳеҷ чиз равшан набошад, пас кӯшиш кунед, ки ин мақоларо дар тӯли якчанд рӯз хонед. Хуб, ё агар шумо дар сатҳҳои аввали Ҷараваш бошед, пас шояд барои шумо омӯхтани баҳор каме барвақт аст. Шумо ҳамеша метавонед ба ин мақола каме дертар баргардед, вақте ки шумо худро дар барномасозӣ дар Java эътимоди бештар ҳис мекунед. Агар ҳама чиз равшан бошад, шумо метавонед кӯшиш кунед, ки баъзе лоиҳаҳои ҳайвоноти худро ба Баҳор интиқол диҳед :) Агар чизе равшан бошад, аммо чизе он қадар зиёд набошад, лутфан шарҳ диҳед :) Инчунин пешниҳодҳо ва шарҳҳо мавҷуданд, агар ман ба ҷое қадам задам ё ягон чизи аблаҳӣ навиштам ) Дар мақолаи навбатӣ мо ба spring-web-mvc ғарқ мешавем ва бо истифода аз баҳор як замимаи оддии веб месозем.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION