JavaRush /جاوا بلاگ /Random-SD /بهار سستن لاءِ آهي. بنيادي، بنيادي تصور ۽ ڪوڊ سان مثال. ح...

بهار سستن لاءِ آهي. بنيادي، بنيادي تصور ۽ ڪوڊ سان مثال. حصو 2

گروپ ۾ شايع ٿيل
گذريل مضمون ۾ ، مون مختصر طور تي وضاحت ڪئي ته بهار ڇا آهي، بِنس ڇا آهن ۽ حوالي سان. هاڻي اهو وقت آهي ڪوشش ڪرڻ جو اهو سڀ ڪجهه ڪيئن ڪم ڪري ٿو. بهار سستن لاءِ آهي.  بنيادي، بنيادي تصور ۽ ڪوڊ سان مثال.  حصو 2 - 1مان ان کي Intellij Idea Enterprise Edition ۾ پاڻ ڪندس. پر منهنجا سڀئي مثال مفت Intellij Idea Community Edition ۾ پڻ ڪم ڪرڻ گهرجن. بس جيڪڏهن توهان اسڪرين شاٽ ۾ ڏسندا ته مون وٽ ڪجهه قسم جي ونڊو آهي جيڪا توهان وٽ ناهي، پريشان نه ڪريو، اهو هن منصوبي لاءِ نازڪ ناهي :) پهرين، اچو ته هڪ خالي ميون پروجيڪٽ ٺاهيو. مون ڏيکاريو ته آرٽيڪل ۾ اهو ڪيئن ڪجي (جيستائين پڙهو لفظن " اهو وقت آهي اسان جي ميون پروجيڪٽ کي ويب پروجيڪٽ ۾ تبديل ڪرڻ جو. "، انهي کان پوء اهو اڳ ۾ ئي ڏيکاري ٿو ته ويب پروجيڪٽ ڪيئن ٺاهيو، ۽ اسان کي هاڻي ان جي ضرورت ناهي) اچو ته ان کي src/main فولڊر ۾ ٺاهيون/java ڪجهه پيڪيج آهي (منهنجي صورت ۾ مون ان کي “ ru.javarush.info.fatfaggy.animals” سڏيو آهي، توهان ان جو نالو ڏئي سگهو ٿا جيڪو توهان چاهيو، بس ان کي درست هنڌن تي پنهنجي نالي سان مٽائڻ نه وساريو). ۽ اچو ته هڪ ڪلاس ٺاهيو Mainجنهن ۾ اسان هڪ طريقو ٺاهينداسين
public static void main(String[] args) {
    ...
}
پوءِ pom.xml فائل کوليو ۽ اتي ھڪڙو سيڪشن شامل ڪريو dependencies. ھاڻي اسان وڃون ٿا Maven مخزن ۽ اتي جديد مستحڪم ورزن جي بهار جي حوالي سان ڏسو ، ۽ پيسٽ ڪريو جيڪو اسان حاصل ڪيو سيڪشن اندر dependencies. مون هن عمل کي هن آرٽيڪل ۾ ٿورو وڌيڪ تفصيل سان بيان ڪيو آهي (ڏسو سيڪشن " منسلڪ انحصار ۾ Maven "). پوء Maven پاڻ کي ڳولهيندو ۽ ضروري انحصار کي ڊائون لوڊ ڪندو، ۽ آخر ۾ توهان کي ڪجهه حاصل ڪرڻ گهرجي:
بهار سستن لاءِ آهي.  بنيادي، بنيادي تصور ۽ ڪوڊ سان مثال.  حصو 2 - 2
کاٻي ونڊو ۾ توھان ڏسي سگھو ٿا پروجيڪٽ جي جوڙجڪ پيڪيج ۽ ڪلاس سان Main. وچين ونڊو ڏيکاري ٿو ته منهنجو pom.xml ڪهڙو نظر اچي ٿو. مون اتي هڪ پراپرٽيز سيڪشن پڻ شامل ڪيو ، جنهن ۾ مون Maven ڏانهن اشارو ڪيو ته مان جاوا جو ڪهڙو نسخو استعمال ڪري رهيو آهيان سورس ڪوڊ ۾ ۽ ڪهڙي ورزن ۾ گڏ ڪرڻ. اهو صرف ان ڪري آهي ته مون کي ڊيڄاريندڙ جو خيال ناهي جڏهن شروع ڪيو ته جاوا جو هڪ پراڻو نسخو استعمال ڪيو پيو وڃي. توهان اهو ڪري سگهو ٿا، توهان نٿا ڪري سگهو) صحيح ونڊو ۾ - توهان ڏسي سگهو ٿا ته جيتوڻيڪ اسان صرف چشمي جي حوالي سان ڳنڍيو آهي - اهو خودڪار طور تي شامل ڪيو ويو آهي ڪور، ڀاڄيون، aop ۽ اظهار. اهو ممڪن هو ته هر ماڊل کي الڳ الڳ ڳنڍڻ، ميموري ۾ هر هڪ لاء انحصار کي رجسٽر ڪرڻ لاء نسخ جي واضح اشاري سان، پر هاڻي لاء اسان هن اختيار سان خوش آهيون جيئن اهو هاڻي آهي. ھاڻي اچو ته ھڪڙو پيڪيج entities(ادارا) ٺاھيون ۽ ان ۾ 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());
}
سڀ کان پهريان، اسان هڪ حوالو اعتراض ٺاهيندا آهيون، ۽ تعمير ڪندڙ ۾ اسان ان کي پيڪيج جو نالو ڏيون ٿا، جيڪو لوبن جي موجودگي لاء اسڪين ڪرڻ جي ضرورت آهي. اهو آهي، بهار هن پيڪيج مان گذرندو ۽ ڪلاس ڳولڻ جي ڪوشش ڪندو جيڪي خاص تشريحن سان نشان لڳل آهن ته بهار کي خبر پوي ته هي هڪ لوبيا آهي. جنهن کان پوءِ اهو انهن طبقن جون شيون ٺاهي ٿو ۽ انهن کي پنهنجي تناظر ۾ رکي ٿو. جنهن کان پوءِ اسان کي ان حوالي سان هڪ ٻلي ملي ٿي. جڏهن حوالن واري اعتراض کي خطاب ڪندي، اسان ان کان پڇون ٿا ته اسان کي هڪ بين (آبجڪٽ) ڏيو، ۽ ظاهر ڪريو ته اسان کي ڪهڙي طبقي جي اعتراض جي ضرورت آهي (هتي، رستي جي ذريعي، توهان نه رڳو ڪلاس، پر انٽرفيس پڻ بيان ڪري سگهو ٿا). جنهن کان پوءِ اسپرنگ هن ڪلاس جو هڪ اعتراض اسان ڏانهن موٽائي ٿو، جنهن کي اسين هڪ ويريبل ۾ محفوظ ڪريون ٿا. اڳيون، اسان بهار کان پڇون ٿا ته اسان کي "ڪتو" نالي هڪ لوبيا حاصل ڪري. جڏهن بهار هڪ طبقاتي اعتراض ٺاهي، Dogاهو ان کي هڪ معياري نالو ڏيندو (جيڪڏهن بينن جو نالو واضح طور تي بيان نه ڪيو ويو آهي)، جيڪو اعتراض جي طبقي جو نالو آهي، صرف هڪ ننڍڙي خط سان. ان ڪري، جيئن اسان جي ڪلاس کي سڏيو ويندو آهي Dog، اهڙي بئن جو نالو "ڪتو" ٿيندو. جيڪڏهن اسان وٽ ڪو اعتراض هجي ها BufferedReader، ته پوءِ بهار ان کي ڊفالٽ نالو ڏئي ها ”بفرڊ ريڊر“. ۽ جيئن ته هن معاملي ۾ (جاوا ۾) ڪا به پڪ ناهي ته ڪهڙي درجي جي اهڙي شئي هوندي، اهو صرف هڪ مخصوص هڪ موٽائي ٿو Object، جنهن کي اسان دستي طور تي اسان کي گهربل قسم ڏانهن وڌايو آهي Dog. ڪلاس جي واضح اشاري سان اختيار وڌيڪ آسان آهي. خير، ٽئين صورت ۾، اسان کي ڪلاس ۽ نالي سان هڪ بين حاصل ڪري. هتي رڳو هڪ حالت ٿي سگهي ٿي، جنهن جي حوالي سان هڪ طبقي جا ڪيترائي ڀاڄيون هجن، ۽ اهو ظاهر ڪرڻ لاءِ ته اسان کي ڪهڙي ٻوٽي جي ضرورت آهي، اسان ان جو نالو ظاهر ڪريون ٿا. جيئن ته اسان واضح طور تي هتي ڪلاس کي اشارو ڪيو آهي، اسان کي هاڻي ڪاسٽ ڪرڻ جي ضرورت ناهي. اهم!جيڪڏهن اهو ظاهر ٿئي ٿو ته بهار ڪيترن ئي ڀاڄين جي ضرورتن مطابق ڳولي ٿو جيڪا اسان ان لاءِ بيان ڪئي آهي، اهو اهو طئي نه ڪري سگهندو ته اسان کي ڪهڙي ڀاڄي ڏيڻي آهي ۽ هڪ استثنا اڇلائي ڇڏيندو. تنهن ڪري، ڪوشش ڪريو ته جيئن ممڪن طور تي واضح طور تي هن ڏانهن اشارو ڪيو وڃي ته توهان کي ڪهڙي بئن جي ضرورت آهي، ته جيئن اهڙي صورتحال پيدا نه ٿئي. جيڪڏهن بهار توهان جي حالتن جي مطابق پنهنجي حوالي سان هڪ بهار نه ڳولي، اهو پڻ هڪ استثنا اڇلائي ڇڏيندو. خير، پوءِ اسان صرف پنهنجي جانورن جا نالا اسڪرين تي ڏيکاريون ٿا انهي کي يقيني بڻائڻ لاءِ ته اهي اصل ۾ اهي شيون آهن جن جي اسان کي ضرورت آهي. پر جيڪڏهن اسان هاڻي پروگرام هلائينداسين، اسان ڏسنداسين ته بهار قسم کڻندي آهي ته اهو جانور نه ڳولي سگهي ٿو جيڪي اسان کي ان جي حوالي سان گهربل آهن. اهو ان ڪري ٿيو جو هن اهي ڀاڄيون پيدا نه ڪيون. جيئن ته مون اڳ ۾ ئي چيو آهي، جڏهن بهار ڪلاس اسڪين ڪري ٿو، اهو ڳولي ٿو "ان جي" بهار جي تشريح اتي. ۽ جيڪڏهن اهو نه ٿو ملي، ته پوءِ اهو اهڙن طبقن کي نٿو سمجهي، جن کي هن کي پيدا ڪرڻ جي ضرورت آهي. @Componentهن کي درست ڪرڻ لاء، صرف اسان جي جانورن جي طبقن ۾ ڪلاس جي سامهون هڪ تشريح شامل ڪريو .
@Component
public class Cat {
	private String name = "Barsik";
	...
}
پر اهو سڀ ڪجهه ناهي. جيڪڏهن اسان کي واضح طور تي اسپرنگ ڏانهن اشارو ڪرڻ جي ضرورت آهي ته هن طبقي لاءِ شينهن جو هڪ مخصوص نالو هجڻ گهرجي، اهو نالو تشريح کان پوءِ قوس ۾ ظاهر ڪري سگهجي ٿو. مثال طور، بهار کي نالو ڏيڻ لاءِ اسان کي parrot-keshaطوطي جي ٻوٽي جي ضرورت آهي، جنهن مان اسان کي mainبعد ۾ اهو طوطي حاصل ٿيندو، اسان کي ڪجهه هن طرح ڪرڻ جي ضرورت آهي:
@Component("parrot-kesha")
public class Parrot {
	private String name = "Kesha";
	...
}
هي خودڪار ترتيب جو سڄو نقطو آهي . توهان پنهنجا ڪلاس لکو، انهن کي ضروري تشريحن سان نشان لڳايو، ۽ توهان جي ڪلاسن سان گڏ هڪ پيڪيج بهار ڏانهن اشارو ڪيو، جنهن ذريعي اهو وڃي ٿو، تشريحون ڳولي ٿو ۽ اهڙن ڪلاسن جون شيون ٺاهي ٿو. رستي جي ذريعي، اسپرنگ نه رڳو تشريحون ڳوليندو @Component، پر ٻين سڀني تشريحن کي پڻ ڳوليندو جيڪي هن مان ورثي ۾ مليا آهن. مثال طور، @Controller, @RestController, @Service, @Repositoryand others , جن کي اسين ايندڙ مضمونن ۾ ملنداسين. هاڻي اچو ته ساڳيو ڪم ڪرڻ جي ڪوشش ڪريون، پر java configuration استعمال ڪندي . پهرين، اچو ته @Componentاسان جي ڪلاسن مان تشريحات کي ختم ڪريون. ڪم کي پيچيده ڪرڻ لاءِ، اچو ته تصور ڪريون ته اهي اسان جا پنهنجا لکيل طبقا نه آهن، جن کي اسان آساني سان تبديل ڪري سگهون ٿا، ڪجهه شامل ڪري سگهون ٿا، بشمول تشريحون. ڄڻ ته اهي ڪلاس ڪنهن لائبريريءَ ۾ ڀريل هوندا آهن. انهي صورت ۾، اسان انهن طبقن کي ڪنهن به طريقي سان تبديل نٿا ڪري سگهون ته جيئن اهي بهار طرفان قبول ڪيا وڃن. پر اسان کي انهن طبقن جي شين جي ضرورت آهي! هتي اسان کي اهڙيون شيون ٺاهڻ لاءِ جاوا ترتيب جي ضرورت پوندي. شروع ڪرڻ سان، اچو ته ھڪڙو پيڪيج ٺاھيون، مثال طور configs، ۽ ان ۾ - ھڪڙو باقاعده جاوا ڪلاس، مثال طور، 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");
توھان اھو ڪري سگھوٿا جيئن توھان چاھيو، پر اھو مون کي لڳي ٿو ته اھو پھريون اختيار، جتي توھان صرف ھڪڙي ڪلاس کي ترتيب سان بيان ڪيو آھي، اسان جي پروگرام کي بھترين مناسب ڪندو. جڏهن هڪ حوالو ٺاهيندي، اسپرنگ انهن طبقن جي ڳولا ڪندو جيڪي تشريح سان نشان لڳل آهن @Configuration۽ انهن طبقن جون شيون پاڻ ۾ ٺاهيندا. جنهن کان پوءِ ڪوشش ڪندو ته انهن ڪلاسن ۾ طريقن کي ڪال ڪرڻ جي جن تي تشريح سان نشان لڳل هوندا @Bean، جنهن جو مطلب آهي ته اهڙا طريقا بينز (آبجڪٽ) واپس ڪندا، جيڪي هن پنهنجي حوالي سان اڳ ۾ رکيا آهن. خير، هاڻي اچو ته پنهنجي ڪلاس ۾ ٻلي، ڪتو ۽ طوطا ٺاهي جاوا جي ترتيب سان. اهو بلڪل سادو ڪيو ويندو آهي:
@Bean
public Cat getCat() {
	return new Cat();
}
اهو ظاهر ٿيو ته اسان دستي طور تي پنهنجي ٻلي پاڻ ٺاهي ۽ ان کي بهار کي ڏنو، ۽ هن اڳ ۾ ئي اسان جي هن اعتراض کي پنهنجي حوالي سان رکيو. جيئن ته اسان پنهنجي ڀاڄين جو نالو واضح طور تي نه ٻڌايو آهي، ان ڪري بهار کي به اهو ئي نالو ڏيندو جيئن طريقه جي نالي سان. اسان جي حالت ۾، ٻلي جي پنن جو نالو هوندو " getCat". پر جيئن ته mainاسان کي اڃا تائين ٻلي نالي سان نه، پر طبقي سان ملي ٿي، ان صورت ۾ اسان لاءِ هن بِن جو نالو اهم نه آهي. ساڳيءَ طرح ڪتي سان به ٻوٽو ٺاهيو، پر ياد رکو ته بهار اهڙيءَ ٻوٽي کي طريقي جي نالي سان نالو ڏين. واضح طور تي طوطي سان اسان جي بين جو نالو رکڻ لاءِ، تشريح کان پوءِ قوس ۾ ان جو نالو ظاهر ڪريو @Bean:
@Bean("parrot-kesha")
public Object weNeedMoreParrots() {
	return new Parrot();
}
جئين توهان ڏسي سگهو ٿا، هتي مون واپسي جي قيمت جو قسم ظاهر ڪيو Object، ۽ طريقي کي سڏيو آهي سڀ ڪجهه. اهو ڪنهن به طرح سان ٻوٽي جي نالي تي اثر انداز نٿو ڪري ڇاڪاڻ ته اسان ان کي هتي واضح طور تي مقرر ڪيو آهي. پر اهو بهتر آهي ته واپسي جي قيمت جو قسم ۽ طريقي جو نالو نيري کان ٻاهر نه، پر وڌيڪ يا گهٽ واضح طور تي. بس پنهنجي لاءِ به، جڏهن توهان هڪ سال ۾ هن پروجيڪٽ کي کوليو. :) هاڻي اچو ته هڪ اهڙي صورتحال تي غور ڪريون جتي هڪ بين ٺاهڻ لاءِ اسان کي ٻي لوب استعمال ڪرڻ جي ضرورت آهي . مثال طور، اسان چاهيون ٿا ته ٻلي جو نالو ٻلي جي بئن ۾ طوطي جي نالي ۽ تار ”-قاتل“ تي مشتمل هجي. ڪو مسئلو ناهي!
@Bean
public Cat getCat(Parrot parrot) {
	Cat cat = new Cat();
	cat.setName(parrot.getName() + "-killer");
	return cat;
}
هتي بهار ڏسندو ته هن ٻوٽي کي ٺاهڻ کان اڳ، هن کي اڳ ۾ ئي ٺهيل طوطي جي ٻوٽي کي هتي منتقل ڪرڻ جي ضرورت پوندي. تنهن ڪري، هو اسان جي طريقن کي سڏڻ جو هڪ سلسلو ٺاهيندو، ته جيئن هڪ طوطي پيدا ڪرڻ جو طريقو پهريون سڏيو وڃي، ۽ پوء هن طوطي کي ٻلي ٺاهڻ جي طريقي ڏانهن منتقل ڪيو وڃي. هي اهو آهي جتي انحصار انجيڪشن نالي شيءِ ڪم ڪيو : بهار پاڻ اسان جي طريقي ۾ گهربل طوطي جي ٻوٽي کي پاس ڪيو. جيڪڏهن خيال هڪ متغير جي باري ۾ شڪايت ڪري ٿو parrot، واپسي جي قسم کي تبديل ڪرڻ نه وساريو طريقي سان هڪ طوطي ٺاهڻ Objectلاء Parrot. اضافي طور تي، جاوا ترتيب ڏيڻ جي اجازت ڏئي ٿي ته توهان مڪمل طور تي ڪنهن به جاوا ڪوڊ تي عمل ڪرڻ جي طريقن ۾ بينن ٺاهڻ لاء. توهان واقعي ڪجھ به ڪري سگهو ٿا: ٻيون مددگار شيون ٺاهيو، ڪنهن ٻئي طريقن کي ڪال ڪريو، جيتوڻيڪ اهي بهار جي تشريح سان نشان نه هوندا آهن، لوپ ٺاهيو، حالتون - جيڪو ذهن ۾ اچي ٿو! اهو سڀ ڪجهه حاصل نه ٿو ڪري سگهجي خودڪار ترتيب جي استعمال سان، تمام گهٽ 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();
	}
}
هتي واپسي جي قيمت جو قسم اسان جو انٽرفيس آهي، ۽ طريقو هفتي جي موجوده ڏينهن جي لحاظ سان انٽرفيس لاڳو ڪرڻ واري ڪلاس جي حقيقي شين کي واپس ڏئي ٿو. ھاڻي ھن طريقي سان main()اسين ڪري سگھون ٿا:
WeekDay weekDay = context.getBean(WeekDay.class);
System.out.println("It's " + weekDay.getWeekDayName() + " today!");
اهو مون کي ٻڌايو ته اڄ آچر آهي :) مون کي پڪ آهي ته جيڪڏهن مان سڀاڻي پروگرام هلائيندس ته ان حوالي سان هڪ بلڪل مختلف اعتراض ظاهر ٿيندو. مهرباني ڪري نوٽ ڪريو ته هتي اسان صرف انٽرفيس ذريعي بين حاصل ڪندا آهيون: context.getBean(WeekDay.class). بهار ان جي حوالي سان ڏسندو ته ان جو ڪهڙو ٻوٽو اهڙو انٽرفيس لاڳو ڪري ٿو ۽ ان کي واپس ڪندو. خير، پوءِ اهو معلوم ٿئي ٿو ته WeekDayقسم جي متغير ۾ هڪ قسم جو اعتراض آهي Sunday، ۽ پوليمورفيزم، جيڪو اسان سڀني کي اڳ ۾ ئي واقف آهي، شروع ٿئي ٿو جڏهن هن متغير سان ڪم ڪندي. :) ۽ گڏيل اپروچ جي باري ۾ ڪجھ لفظ ، جتي ڪجھه ٻوٽا اسپرنگ جي طرفان ٺاھيا ويا آھن، ھڪڙي تشريح سان ڪلاسن جي موجودگيءَ لاءِ پيڪيجز جي اسڪيننگ کي استعمال ڪندي @Component، ۽ ڪجھ ٻيون بينز جاوا ترتيب استعمال ڪندي ٺاھيا ويندا آھن. هن کي ڪرڻ لاء، اچو ته اصل ورزن ڏانهن واپس وڃو، جڏهن طبقن Cat، Dog۽ Parrotهڪ تشريح سان نشان لڳل هئا @Component. اچو ته چئو ته اسان بهار تائين پيڪيج جي خودڪار اسڪيننگ استعمال ڪندي پنهنجن جانورن لاءِ بِن ٺاهڻ چاهيون ٿا entities، پر هفتي جي ڏينهن سان گڏ هڪ بن ٺاهيو جيئن اسان ڪيو. توهان کي صرف ڪلاس جي سطح تي شامل ڪرڻ جي ضرورت آهي ، جيڪا اسان بيان ڪريون ٿا جڏهن -th تشريح 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()اسان وٽ هاڻي سڀني شين تائين رسائي آهي جيڪا اسان کي گهربل آهي: ٻنهي جانورن جي شين ۽ هفتي جو ڏينهن. ڪيئن پڪ ڪجي ته بهار به ڪجهه xml ترتيبن کي چونڊيندو آهي - جيڪڏهن توهان کي ضرورت هجي ته ان کي انٽرنيٽ تي گوگل ڪريو :) خلاصو:
  • خودڪار ٺاھ جوڙ استعمال ڪرڻ جي ڪوشش؛
  • خودڪار ترتيب جي دوران، اسان پيڪيج جو نالو ظاهر ڪندا آهيون جنهن ۾ طبقن شامل آهن جن جي بينز ٺاهڻ جي ضرورت آهي؛
  • اهڙن طبقن کي هڪ تشريح سان نشان لڳايو ويو آهي@Component;
  • بهار اهڙن سڀني طبقن مان گذري ٿو ۽ پنهنجون شيون ٺاهي ٿو ۽ انهن کي ان حوالي سان رکي ٿو.
  • جيڪڏهن خودڪار ترتيب اسان کي ڪجهه سببن لاء مناسب نه آهي، اسان جاوا ترتيب استعمال ڪندا آهيون؛
  • انهي صورت ۾، اسان هڪ باقاعده جاوا ڪلاس ٺاهيندا آهيون، جنهن جا طريقا اسان کي گهربل شيون واپس آڻيندا آهن، ۽ اهڙي طبقي کي هڪ تشريح سان نشان لڳايو آهي، @Configurationجيڪڏهن اسان سڄي پيڪيج کي اسڪين ڪريون ٿا، بجاء هڪ مخصوص ڪلاس کي ترتيب سان ترتيب ڏيڻ جي بدران؛
  • هن ڪلاس جا طريقا جيڪي موٽڻ وارين کي تشريح سان نشان لڳل آهن @Bean؛
  • جيڪڏھن اسان چاھيون ٿا خودڪار اسڪيننگ کي فعال ڪرڻ وقت جڏھن جاوا ترتيب استعمال ڪريون ٿا، اسان تشريح استعمال ڪندا آھيون @ComponentScan.
جيڪڏهن ڪجھ به واضح نه آهي، ته پوء هن مضمون کي ڪجهه ڏينهن ۾ پڙهڻ جي ڪوشش ڪريو. خير، يا جيڪڏهن توهان جاوارش جي شروعاتي سطحن تي آهيو، ته پوءِ شايد توهان لاءِ بهار سکڻ ۾ ٿورو اڳڀرو آهي. توھان ھميشه ھن مضمون ڏانھن ٿوري دير بعد واپس ڪري سگھو ٿا، جڏھن توھان محسوس ڪيو وڌيڪ اعتماد جاوا ۾ پروگرامنگ ۾. جيڪڏھن سڀ ڪجھ صاف آھي، توھان ڪوشش ڪري سگھوٿا توھان جي ڪجھ پالتو منصوبن کي بهار ڏانھن منتقل ڪرڻ جي :) جيڪڏھن ڪجھ صاف آھي، پر ڪجھھ ايترو گھڻو نه آھي، مھرباني ڪري تبصرو ڪريو :) اتي پڻ تجويزون ۽ تبصرا آھن جيڪڏھن مون ڪٿي قدم رکيو آھي يا مون ڪجھھ بيوقوف لکيو آھي. ) ايندڙ آرٽيڪل ۾ اسين اسپرنگ-ويب-ايم وي سي ۾ هڪ گہرا غوطا وٺنداسين ۽ اسپرنگ استعمال ڪندي هڪ سادي ويب ايپليڪيشن ٺاهينداسين.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION