پوئين مضمون
۾ ، مون مختصر طور تي وضاحت ڪئي هئي ته بهار ڇا آهي ۽ ڪهڙيون ڀاڄيون ۽ حوالا آهن. هاڻي ان کي ڪوشش ڪرڻ جو وقت آهي. مان ان کي استعمال ڪرڻ وارو آهيان IntelliJ IDEA انٽرپرائز ايڊيشن. پر منهنجا سڀئي مثال مفت IntelliJ IDEA ڪميونٽي ايڊيشن ۾ پڻ ڪم ڪرڻ گهرجن. اسڪرين شاٽ ۾، جيڪڏھن توھان ڏسندا ته مون وٽ ڪجھ ونڊو آھي جيڪا توھان وٽ ناھي، پريشان نه ٿيو - اھو ھن پروجيڪٽ لاءِ اھم ناھي :)
پھريون، ھڪڙو خالي 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 پاڻ کي ڳولي ۽ ڊائون لوڊ ڪندو ضروري انحصار. آخر ۾، توھان کي ڪجھھ حاصل ڪرڻ گھرجي: 
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
تشريح سان نشان لڳايو ويو آهي
@ComponentScan
تشريح استعمال ڪريون ٿا.
GO TO FULL VERSION