CodeGym /جاوا بلاگ /Random-SD /سست ماڻهن لاءِ بهار فائونڊيشن، بنيادي مفهوم، ۽ ڪوڊ سان مث...
John Squirrels
سطح
San Francisco

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

گروپ ۾ شايع ٿيل
پوئين مضمون ۾ ، مون مختصر طور تي وضاحت ڪئي هئي ته بهار ڇا آهي ۽ ڪهڙيون ڀاڄيون ۽ حوالا آهن. هاڻي ان کي ڪوشش ڪرڻ جو وقت آهي. مان ان کي استعمال ڪرڻ وارو آهيان IntelliJ IDEA انٽرپرائز ايڊيشن. پر منهنجا سڀئي مثال مفت IntelliJ IDEA ڪميونٽي ايڊيشن ۾ پڻ ڪم ڪرڻ گهرجن. اسڪرين شاٽ ۾، جيڪڏھن توھان ڏسندا ته مون وٽ ڪجھ ونڊو آھي جيڪا توھان وٽ ناھي، پريشان نه ٿيو - اھو ھن پروجيڪٽ لاءِ اھم ناھي :) سست ماڻهن لاءِ بهار فائونڊيشن، بنيادي مفهوم، ۽ ڪوڊ سان مثال.  حصو 2 - 1پھريون، ھڪڙو خالي Maven پروجيڪٽ ٺاھيو. مون ڏيکاريو ته هن لنڪ تي آرٽيڪل ۾ اهو ڪيئن ڪجي . لفظن تائين پڙهو " اهو وقت اچي ويو آهي اسان لاءِ پنهنجي Maven پروجيڪٽ کي ويب پروجيڪٽ ۾ تبديل ڪريون. " - ان کان پوءِ، آرٽيڪل ڏيکاري ٿو ته ويب پروجيڪٽ ڪيئن ٺاهيو، پر اسان کي هن وقت ان جي ضرورت ناهي. src/main/java فولڊر ۾ ، ھڪڙو پيڪيج ٺاھيو (منھنجي صورت ۾، مون ان کي سڏيو آھي " en.codegym.info.fatfaggy.animals. توھان ان کي سڏي سگھو ٿا جيڪو توھان چاھيو. بس منھنجي پيڪيج جو نالو پنھنجي پيڪيج جي نالي سان تبديل ڪرڻ نه وساريو. ھاڻي ٺاھيو Mainڪلاس ۽ ھڪڙو طريقو شامل ڪريو

public static void main(String[] args) {
    ...
}
ان کان پوء، pom.xml فائل کوليو ۽ dependenciesسيڪشن شامل ڪريو. ھاڻي وڃو Maven repository ۽ ڳوليو بهار جي حوالي سان جديد مستحڪم ورزن لاءِ. سيڪشن ۾ جيڪو اسان ڳوليو سو رکو dependencies. مون ھن عمل کي وڌيڪ تفصيل سان بيان ڪيو آھي ھن ٻئي CodeGym مضمون ۾ (ڏسو سيڪشن جو عنوان " Maven ۾ Connecting انحصار "). پوء Maven پاڻ کي ڳولي ۽ ڊائون لوڊ ڪندو ضروري انحصار. آخر ۾، توھان کي ڪجھھ حاصل ڪرڻ گھرجي: سست ماڻهن لاءِ بهار فائونڊيشن، بنيادي مفهوم، ۽ ڪوڊ سان مثال.  حصو 2 - 2کاٻي پاسي واري ونڊو ۾، توھان ڏسي سگھو ٿا پروجيڪٽ جي جوڙجڪ کي پيڪيج ۽ ڪلاس سان Main. وچين ونڊو ڏيکاري ٿي ته ڪيئن pom.xml مون لاءِ نظر اچي ٿو. مون ان ۾ پراپرٽي سيڪشن پڻ شامل ڪيو. ھي سيڪشن Maven کي ٻڌائي ٿو ته جاوا جو ڪھڙو ورجن مان استعمال ڪري رھيو آھيان پنھنجي سورس فائلن ۾ ۽ ڪھڙو ورجن مرتب ڪرڻو آھي. اهو صرف ان ڪري آهي ته IDEA مون کي ڊيڄاري نٿو ته مان جاوا جو پراڻو ورزن استعمال ڪري رهيو آهيان. هي اختياري آهي :) ساڄي ونڊو اهو واضح ڪري ٿو ته جيتوڻيڪ اسان صرف اسپرنگ جي حوالي سان ماڊل کي ڳنڍيو آهي، اهو خود بخود اسپرنگ-ڪور، اسپرنگ بينز، اسپرنگ-ايپ ۽ اسپرنگ ايڪسپريشن ماڊلز ۾ ڇڪجي ويو آهي. اسان هر ماڊل کي الڳ الڳ سان ڳنڍي سگهون ها، pom.xml فائل ۾ واضح ورزن سان هر ماڊل لاء هڪ انحصار لکندا، پر هن وقت اسان شين سان خوش آهيون جيئن اهي آهن. ھاڻي entitiesپيڪيج ٺاھيو ۽ ان ۾ 3 ڪلاس ٺاھيو: Cat, Dog, Parrot. اچو ته هر جانور کي هڪ نالو ڏيو ( private String name- توهان اتي ڪجهه قدر هارڊ ڪوڊ ڪري سگهو ٿا). حاصل ڪندڙ/سيٽر عوامي آهن. Mainھاڻي اسان ڪلاس ۽ طريقي ڏانھن وڃون ٿا main()، ۽ اسين ڪجھ ھن طرح لکندا آھيون:

public static void main(String[] args) {
	// Create an empty Spring context that will look for its own beans based on the annotations in the specified package
	ApplicationContext context = 
		new AnnotationConfigApplicationContext("en.codegym.info.fatfaggy.animals.entities");

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

	System.out.println(cat.getName());
	System.out.println(dog.getName());
	System.out.println(parrot.getName());
}
سڀ کان پهريان، اسان هڪ حوالو اعتراض ٺاهي، تعمير ڪندڙ کي ٻڌايو ته ڪهڙي پيڪيج کي ڏسڻ لاء بينس ڳولڻ لاء. ٻين لفظن ۾، بهار هن پيڪيج جي ذريعي وڃو ۽ خاص تشريح سان نشان لڳل ڪلاس ڳولڻ جي ڪوشش ڪندا جيڪي ظاهر ڪن ٿا ته اهي لوبيا آهن. پوءِ اھو انھن طبقن جون شيون ٺاھي ٿو ۽ انھن کي تناظر ۾ رکي ٿو. ان کان پوء، اسان کي ان حوالي سان هڪ ٻلي ملي ٿي. اسان حوالن واري اعتراض کي سڏين ٿا ته اسان کي هڪ بين (آبجڪٽ) ڏيو، جيڪو اسان چاهيون ٿا ان جي ڪلاس کي ظاهر ڪري ٿو (انهي سان، اسان انٽرفيس پڻ بيان ڪري سگهون ٿا، نه صرف ڪلاس). ان کان پوء، اسپرنگ درخواست ڪيل ڪلاس جو هڪ اعتراض واپس ڪري ٿو، جنهن کي اسين پوء هڪ متغير ۾ محفوظ ڪندا آهيون. اڳيون، اسان بهار کان پڇون ٿا ته اسان کي "ڪتو" سڏيو ويندو آهي. جڏهن اسپرنگ هڪ Dogاعتراض ٺاهي ٿو، اهو اعتراض کي هڪ معياري نالو ڏئي ٿو (جيستائين ٺاهيل بين کي واضح طور تي نالو نه ڏنو ويو آهي)، جيڪو ڪلاس جو نالو آهي پر هڪ ابتدائي ننڍو اکر سان. ان صورت ۾، اسان جي طبقي کي سڏيو ويندو آهي Dog، تنهنڪري بينن جو نالو "ڪتو" آهي. جيڪڏهن اسان کي BufferedReaderاتي ڪنهن شئي جي ضرورت هجي، ته پوءِ بهار ان کي ”بفرڊ ريڊر“ جو نالو ڏيندو. ۽ ڇاڪاڻ ته جاوا 100٪ پڪ نه ٿي سگهي ته اسان ڪهڙي طبقي کي چاهيون ٿا، اهو هڪ Objectاعتراض واپس ڪري ٿو، جنهن کي اسان پوء دستي طور تي گهربل قسم ڏانهن وڌايو، يعني Dog. اهو اختيار جتي ڪلاس واضح طور تي ظاهر ڪيو ويو آهي وڌيڪ آسان آهي. ٽيون آپشن آھي حاصل ڪرڻ لاءِ ڪلاس جي نالي سان ۽ بين جي نالي سان. ممڪن آهي ته ان حوالي سان هڪ طبقي جا ڪيترائي بيت هجن. اسان کي ضرورت جي خاص ٻوٽي کي ظاهر ڪرڻ لاء، اسان ان جو نالو ظاهر ڪندا آهيون. ڇو ته اسان پڻ واضح طور تي هتي ڪلاس کي ظاهر ڪريون ٿا، اسان کي هاڻي ڪاسٽ ڪرڻ جي ضرورت ناهي. اهم!جيڪڏهن بهار ۾ ڪيترائي ڀاڄيون ملن ٿيون جيڪي اسان جي گهرجن سان ملن ٿيون، پوءِ اهو طئي نٿو ڪري سگهي ته اسان کي ڪهڙي لوبيا ڏيڻي آهي، تنهنڪري اهو هڪ استثنا اڇلائي ڇڏيندو. تنهن ڪري، هن صورتحال کان بچڻ لاء، توهان کي ممڪن حد تائين مخصوص ٿيڻ جي ڪوشش ڪرڻ گهرجي ته بهار کي ٻڌائڻ ۾ توهان کي ڪهڙي لوبيا جي ضرورت آهي. جيڪڏهن اسپرنگ ان جي حوالي سان ڳولهي ٿو ۽ هڪ واحد بين ڳولڻ ۾ ناڪام ٿئي ٿو جيڪو اسان جي گهرجن سان ملندو آهي، پوء اهو پڻ هڪ استثنا اڇلائي ڇڏيندو. آخرڪار، اسان صرف اسان جي جانورن جا نالا ڏيکاريندا آهيون انهي جي تصديق ڪرڻ لاءِ ته اسان کي اهي شيون مليون آهن جن جي اسان کي ضرورت آهي. پر جيڪڏھن اسان ھاڻي پروگرام ھلائينداسين، اسان ڏسنداسين ته بهار ناخوش آھي - اھو انھن جانورن کي ڳولي نٿو سگھي جيڪي اسان کي ان جي حوالي سان گھربل آھن. اهو ئي سبب آهي ته هن اهي ڀاڄيون پيدا نه ڪيون آهن. جيئن مون اڳ ۾ چيو آهي، جڏهن بهار اسڪين ڪلاس، اهو پنهنجي بهار جي تشريح کي ڳولي ٿو. ۽ جيڪڏهن بهار کي اهي تشريحون نه ملنديون آهن، ته پوءِ اهو نه سوچيندو آهي ته اهي طبقا انهن شين سان ملن ٿا جيڪي ان کي ٺاهڻ گهرجن. هن کي درست ڪرڻ لاءِ @Componentاسان جي هر جانور جي طبقن جي سامهون تشريح شامل ڪرڻ جي ضرورت آهي.

@Component
public class Cat {
	private String name = "Oscar";
	...
}
پر اتي وڌيڪ آهي. جيڪڏهن اسان کي واضح طور تي Spring کي ٻڌائڻ جي ضرورت آهي ته هن طبقي لاءِ شينهن جو هڪ مخصوص نالو هجڻ گهرجي، اسان تشريح کان پوءِ قوس ۾ نالو ظاهر ڪندا آهيون. parrot-pollyمثال طور، بهار کي ٻڌائڻ لاءِ ته طوطي جي ٻوٽي کي "" نالو ڏيو ، جنهن جو نالو اسان هن طوطي کي حاصل ڪرڻ لاءِ استعمال ڪنداسين main، اسان کي ڪجهه هن طرح ڪرڻ گهرجي:

@Component("parrot-polly")
public class Parrot {
	private String name = "Polly";
	...
}
هي خودڪار ترتيب جو سڄو نقطو آهي . توهان پنهنجا ڪلاس لکو، انهن کي ضروري تشريحن سان نشان لڳايو، ۽ بهار کي اهو پيڪيج ٻڌايو جنهن ۾ توهان جا ڪلاس آهن. هي اهو پيڪيج آهي جنهن جي فريم ورڪ ذريعي هلندي تشريحون ڳولڻ ۽ انهن طبقن جون شيون ٺاهي. رستي جي ذريعي، بهار نه رڳو @Componentتشريحون ڳولي ٿو، پر ٻين سڀني تشريحون جيڪي هن کي ورثي ۾ ملن ٿيون. مثال طور، @Controller, @RestController, @Service, @Repository, and more، جن کي اسين مستقبل جي مضمونن ۾ متعارف ڪنداسين. ھاڻي اسان ڪوشش ڪنداسين ساڳيو ڪم استعمال ڪندي Java-based 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("en.codegym.info.fatfaggy.animals.configs");
انهي حالت ۾، بهار پيڪيج جي ذريعي وڃو ۽ سڀني طبقن کي ڳوليندا جيڪي @Configurationتشريح سان نشان لڳل آهن. خير، ۽ جيڪڏھن اسان وٽ ھڪڙو وڏو پروگرام آھي جنھن ۾ ترتيبن کي مختلف پيڪيجز ۾ ورهايو ويو آھي، پوءِ اسان صرف ڪاما جي حد بندي ڪيل پيڪيجز جي نالن جي فهرست ڏيکاريون ٿا جن ۾ ترتيب ڏنل آھن:

ApplicationContext context =
	new AnnotationConfigApplicationContext("en.codegym.info.fatfaggy.animals.database.configs",
		"en.codegym.info.fatfaggy.animals.root.configs",
		"en.codegym.info.fatfaggy.animals.web.configs");
يا هڪ پيڪيج جو نالو جيڪو انهن سڀني لاءِ عام آهي:

ApplicationContext context =
	new AnnotationConfigApplicationContext("en.codegym.info.fatfaggy.animals");
توهان اهو ڪري سگهو ٿا جيئن توهان چاهيو، پر اهو مون کي لڳي ٿو ته پهريون اختيار، جيڪو صرف ترتيب سان هڪ طبقي کي اشارو ڪري ٿو، اسان جي پروگرام کي بهترين طور تي مناسب ٿيندو. جڏهن هڪ حوالو ٺاهيندي، اسپرنگ ڪلاسن کي ڳوليندو آهي جنهن ۾ @Configurationتشريح سان نشان لڳل هوندا آهن ۽ انهن طبقن جون پنهنجون شيون ٺاهيندو. اهو ڪوشش ڪري ٿو سڏڻ جي طريقن کي تشريح سان نشان لڳل @Bean، جنهن جو مطلب آهي ته اهي طريقا موٽن (شيون) جيڪي بهار جي حوالي سان شامل ڪندا. ۽ ھاڻي اسان پنھنجي ڪلاس ۾ ٻلي، ڪتي ۽ طوطي لاءِ جاوا جي بنياد تي ٺاھڻ سان ڀاڄيون ٺاھينداسين. اهو ڪرڻ بلڪل سادو آهي:

@Bean
public Cat getCat() {
	return new Cat();
}
هتي اسان دستي طور تي اسان جي ٻلي ٺاهي ۽ ان کي بهار ڏانهن هٿ ڪيو، جيڪو پوء اسان جي اعتراض کي ان جي حوالي سان رکي ٿو. جيئن ته اسان واضح طور تي اسان جي لوبيا جو نالو نه ڏنو آهي، بهار ان کي ساڳيو نالو ڏيندو جيئن طريقي جي نالي سان. اسان جي حالت ۾، ٻلي بين سڏيو ويندو " getCat". پر ڇاڪاڻ ته اسان ڪلاس استعمال ڪندا آهيون، نالو نه، طريقو ۾ ٻلي بين حاصل ڪرڻ لاء main، بين جو نالو اسان لاء اهم ناهي. ساڳيءَ طرح ڪتي جي ٻوٽي ٺاهيو، ان ڳالهه کي ذهن ۾ رکندي ته بهار ان ٻوٽي کي طريقي جو نالو ڏئي. واضح طور تي اسان جي طوطي جو نالو رکڻ لاءِ، اسان @Beanتشريح کان پوءِ صرف قوس ۾ ان جو نالو ظاهر ڪريون ٿا:

@Bean("parrot-polly")
public Object weNeedMoreParrots() {
	return new Parrot();
}
جئين توهان ڏسي سگهو ٿا، هتي مون هڪ Objectواپسي جي قسم جو اشارو ڏنو ۽ طريقي کي هڪ خودمختيار نالو ڏنو. اهو شينهن جي نالي تي اثر انداز نٿو ٿئي، ڇاڪاڻ ته اسان هتي نالو واضح طور تي بيان ڪيو آهي. اڃا، اهو بهتر آهي ته گهٽ يا گهٽ معنيٰ واري واپسي جي قيمت ۽ طريقي جو نالو ظاهر ڪيو وڃي. اهو ڪريو جيڪڏهن ڪنهن ٻئي سبب لاءِ توهان پنهنجو پاڻ تي احسان ڪرڻ کان سواءِ جڏهن توهان هڪ سال ۾ پروجيڪٽ ٻيهر کوليو. . _ _ مثال طور، فرض ڪريو اسان چاهيون ٿا ته ٻلي جو نالو ٻلي بين ۾ طوطي جو نالو ۽ تار ”-قاتل“ هجي. ڪو مسئلو ناهي!

@Bean
public Cat getCat(Parrot parrot) {
	Cat cat = new Cat();
	cat.setName(parrot.getName() + "-killer");
	return cat;
}
هتي بهار ڏسندو ته هن بين کي ٺاهڻ لاء، فريم ورڪ کي اڳ ۾ ٺهيل طوطي بين ۾ گذرڻ جي ضرورت آهي. ان جي مطابق، اهو طريقو ڪالن جي ضروري زنجير کي ترتيب ڏيندو: پهرين، طوطي ٺاهڻ واري طريقي کي سڏيو ويندو آهي ۽ پوء فريم ورڪ نئين طوطي کي ٻلي ٺاهڻ واري طريقي ڏانهن منتقل ڪري ٿو. ھتي آھي جتي انحصار انجيڪشن راند ۾ اچي ٿو: بهار پاڻ کي اسان جي طريقي سان گھربل طوطي جي پنن کي منتقل ڪري ٿو. جيڪڏهن IDEA متغير جي باري ۾ پريشان ٿي وڃي ته parrot، طوطي ٺاهڻ واري طريقي جي واپسي جي قسم کي تبديل ڪرڻ نه Objectوساريو Parrot. اضافي طور تي، جاوا جي بنياد تي ترتيب ڏيڻ جي اجازت ڏئي ٿي توهان کي مڪمل طور تي ڪنهن به جاوا ڪوڊ هلائڻ ۾ توهان جي بين ٺاهڻ جي طريقن ۾. توھان واقعي ڪجھ به ڪري سگھو ٿا: ٻيون مددگار شيون ٺاھيو، ڪنھن ٻئي طريقن کي ڪال ڪريو، حتي اھي جيڪي بهار جي تشريح سان نشان نه ھجن، لوپ ٺاھيو، بوليان حالتون - جيڪو ڪجھ به ذهن ۾ اچي! اهو سڀ ڪجهه ممڪن ناهي ته خودڪار ترتيب سان، ۽ اڃا به گهٽ، ايڪس ايم ايل ترتيب سان. هاڻي اچو ته هڪ مسئلي تي غور ڪريو جيڪو ڪجهه وڌيڪ مزو آهي. پوليمورفزم ۽ انٽرفيس :) اسان هڪ انٽرفيس ٺاهينداسين 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("Today is " + weekDay.getWeekDayName() + "!");
منهنجي لاءِ، پروگرام مون کي ٻڌائي ٿو ته اهو آچر آهي :) مون کي يقين آهي ته جيڪڏهن آئون سڀاڻي پروگرام هلائيندس، ته ان حوالي سان هڪ مڪمل طور تي مختلف اعتراض هوندو. نوٽ ڪريو ته اسان بين حاصل ڪري رهيا آهيون صرف انٽرفيس استعمال ڪندي: context.getBean(WeekDay.class). بهار ان جي حوالي سان بينن جي ڳولا ڪندو جيڪو انٽرفيس کي لاڳو ڪري ٿو، ۽ ان کي واپس ڪندو. پوءِ اهو معلوم ٿئي ٿو ته اسان جو WeekDayمتغير هڪ آچر اعتراض سان ختم ٿئي ٿو، ۽ پوليمورفيزم جو واقف تصور لاڳو ٿئي ٿو جيئن اسين هن متغير سان ڪم ڪريون ٿا. :) ھاڻي ڪجھ ڳالھيون گڏيل اپروچ جي باري ۾ ، جن ۾ ڪجھ بينز خود بخود اسپرنگ ذريعي، ڪجھ اسڪيننگ پيڪيجز لاءِ ڪلاسن جي @Componentتشريح سان، ۽ ٻيا جاوا جي بنياد تي ترتيب ڏيڻ سان. جيئن اسان هن تي غور ڪنداسين، اسان اصل نسخي ڏانهن موٽنداسين، جتي Cat, Dog۽ Parrotطبقن کي @Componentتشريح سان نشان لڳايو ويو هو. فرض ڪريو اسان پنهنجي جانورن لاءِ ڀاڄيون ٺاهڻ چاهيون ٿا ته بهار پاڻمرادو پيڪيج کي اسڪين ڪري ، entitiesپر اسان پڻ هفتي جي ڏينهن سان گڏ هڪ لوبيا ٺاهڻ چاهيون ٿا، جيئن اسان ڪيو. @ComponentScanتوهان کي صرف ڪلاس جي سطح تي تشريح شامل ڪرڻ جي ضرورت آهي MyConfig، جنهن کي اسان اشارو ڪريون ٿا جڏهن سياق و سباق ٺاهي رهيا آهيون main()، ۽ قوس ۾ ڏيکاريو ته پيڪيج جنهن کي اسڪين ڪرڻ جي ضرورت آهي ۽ ضروري طبقن جي بينن کي خودڪار طريقي سان ٺاهيو:

@Configuration
@ComponentScan("en.codegym.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ڪلاس کي پروسيس ڪرڻ جي ضرورت آهي. اهو ڪلاس ۾ داخل ٿئي ٿو ۽ ڏسي ٿو ته ان کي " en.codegym.info.fatfaggy.animals.entities" پيڪيج کي اسڪين ڪرڻ جي ضرورت آهي ۽ انهن طبقن جي بينز ٺاهڻ جي ضرورت آهي، جنهن کان پوء اهو MyConfigڪلاس جي getDay()طريقي تي عمل ڪري ٿو ۽ WeekDayان حوالي سان هڪ بين شامل ڪري ٿو. طريقي ۾ main()، اسان وٽ هاڻي سڀني شين تائين رسائي آهي جيڪا اسان کي گهربل آهي: ٻئي جانور شيون ۽ هفتي جي ڏينهن سان گڏ هڪ لوبيا. جيڪڏهن توهان کي ڪڏهن به اسپرنگ ٺاهڻ جي ضرورت آهي ته ڪجهه XML ڪنفيگريشن فائلون به کڻو، توهان وضاحت ڳولڻ لاءِ پنهنجي ويب سرچ ڪري سگهو ٿا :) خلاصو:
  • استعمال ڪرڻ جي ڪوشش ڪريو خودڪار ٺاھ جوڙ
  • خودڪار ترتيب جي دوران، پيڪيج جو نالو ظاهر ڪريو جنهن ۾ طبقن شامل آهن جن جي بينز کي ٺاهڻ جي ضرورت آهي
  • @Componentاهي طبقا تشريح سان نشان لڳل آهن
  • بهار انهن سڀني طبقن ذريعي هلندو آهي، شيون ٺاهي ٿو، ۽ انهن جي حوالي سان رکي ٿو؛
  • جيڪڏهن خودڪار ترتيب ڪنهن سبب جي ڪري اسان کي مناسب نه آهي، اسان استعمال ڪريون ٿا Java-based configuration
  • انهي حالت ۾، اسان هڪ عام جاوا ڪلاس ٺاهيندا آهيون جنهن جا طريقا اسان کي گهربل شيون واپس آڻيندا آهن. اسان هن ڪلاس کي تشريح سان نشان لڳايو @Configurationجيڪڏهن اسان پوري پيڪيج کي اسڪين ڪرڻ وارا آهيون بجاءِ هڪ مخصوص ڪلاس کي ترتيب سان ظاهر ڪرڻ جي بدران
  • هن ڪلاس جا طريقا جيڪي موٽن ٿا، انهن کي @Beanتشريح سان نشان لڳايو ويو آهي
  • جيڪڏهن اسان خودڪار اسڪيننگ کي فعال ڪرڻ چاهيون ٿا جڏهن Java-based configuration استعمال ڪريون ٿا، اسان @ComponentScanتشريح استعمال ڪريون ٿا.
جيڪڏهن هي مضمون بلڪل مونجهارو آهي، ته پوءِ ان کي ڪجهه ڏينهن ۾ پڙهڻ جي ڪوشش ڪريو. يا جيڪڏهن توهان CodeGym جي شروعاتي سطحن مان هڪ تي آهيو، اهو ٿي سگهي ٿو ته توهان لاءِ ٿورو اڳڀرو ٿي بهار جو مطالعو ڪري رهيا آهيو. توھان ھميشه ھن مضمون ڏانھن ٿوري دير بعد واپس ڪري سگھو ٿا جڏھن توھان محسوس ڪيو توھان جي جاوا پروگرامنگ صلاحيتن ۾ وڌيڪ اعتماد. جيڪڏهن سڀ ڪجهه واضح آهي، ته پوء توهان ڪوشش ڪري سگهو ٿا ڪجهه پالتو پروجيڪٽ کي بهار ۾ تبديل ڪرڻ جي :) جيڪڏهن ڪجهه شيون واضح آهن پر ٻيون شيون نه آهن، ته پوء مهرباني ڪري هڪ تبصرو ڇڏي ڏيو :) مون کي توهان جي تجويز ۽ تنقيد کي خبر ڏيو، جيڪڏهن مان غلط ٿي چڪو آهيان ڪنهن جاءِ تي يا ڪجهه بي معنيٰ لکيو آهي :) ايندڙ مضمون ۾، اسين اوچتو اسپرنگ-ويب-ايم وي سي ۾ ڊيوٽي ڪنداسين ۽ اسپرنگ استعمال ڪندي هڪ سادي ويب ايپليڪيشن ٺاهينداسين.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION