PDA

View Full Version : سوال: مفاهیم فریمورک spring



alireza19330
شنبه 23 اردیبهشت 1391, 13:51 عصر
با سلام خدمت دوستان
می خواستم از دوستان با تجربه تر بخوام که مفاهیم پایه فریمورک spring رو به طور خلاصه و عملی بیان کنند
یعنی خودم که خوندم یه چیزایی دستگیرم شد و زیاد قابل لمس نیست واسم
مفاهیمی مثل : IoC یا همون dependency Injection و Aspect Oriented Programming و bean و ...
با تشکر

alireza19330
دوشنبه 25 اردیبهشت 1391, 13:28 عصر
کسی نیست که مرا یاری کند؟

senior_foe
شنبه 30 اردیبهشت 1391, 13:11 عصر
سلام
من در زمینه Spring با تجربه نیستم. لذا فکر کنم نظر خوب و پخته ای نمی تونم بدم.
اما جدیدا یه کتابچه خیلی خوب به نام Just Spring (http://fwd4.me/110t) از انتشارات O'reilly چاپ شده که ۶۰ صفحه هست!! و مغز Spring رو توضیح می ده. همه این مفاهیمی که می خوای تو اون توضیح داده شده. (Bean Factory و IoC و Messaging و ... اما Aspect Oriented رو یادم نیست.)
تو یه نصف روز هم میشه تفریحی خوندش.

امیدوارم به دردت بخوره.

ناصرقلی
چهارشنبه 03 خرداد 1391, 12:49 عصر
اسپرینگ در اصل یک فریم ورک IOC یا Dependency Injection است. در مورد این مفهوم می توانی در اینترنت مستقلا مطالبی بیابی . فریم ورکهای دیگری هم برای این کار وجود دارند.
اما اسپرینگ به دلیل اینکه امکان IOC را فراهم می کند از همین طریق امکانات اضافی دیگری را هم فراهم می کند مثل AOP , remoting , clustering , ... اما باید توجه داشته باشید کار اصلی آن همان IOC است. شما ابتدا باید این مفهوم را درک کرده و فراگیرید.
برنامه نویسی AOP هم ماجرای خودش را دارد که باید مستقلا در این مورد تحقیق کنید.
اسپرینگ این امکانات را به صورتی در خود پیاده سازی کرده که معمار سیستم می تواند بدون درگیر شدن با کدهای نوشته شده توسط برنامه نویسان سیستم معماری سیستم را تا حدی تغییر داده و دستکاری کند و مسایلی چون ارتباط با سیستم های خارجی از طریق Web Service ,RMI,JMS , ... اصلا توسط برنامه نویسان دیده نشوند و همچنین امکان افزودن یا حذف تکنولوژی های مختلف را به نرم افزار با کمترین تغییرات در خود دارد.
اسپرینگ رایج ترین نمونه از این نوع فریم ورکها در دنیای جاواست اما فریم ورکهای دیگری هم وجود دارند . JBoss Seam یکی از رقبایش است که البته رویکردش ارایه یک فریم ورک یکسان از لایه واسط کاربر تا دیتابیس بوده و بر خلاف اسپرینگ چندان سعی در انعطاف پذیری نداشته است. گوگل هم محصولی در همین رابطه دارد.
در اسپرینگ سعی شده همه تکنولوژی ها به ساده ترین صورت و ترجیحا بدون تاثیر گذاشتن بر ساختار نرم افزار قابل استفاده باشند.
در دنیای جاوا معمولا اول مفاهیم مطرح می شوند و بعد پیاده سازی های متعدد از آن ارایه می شوند (نه مثل دنیای دات نت که معمولا یک مفهوم همراه با تنها پیاده سازی آن ارایه می شود و همه مفهوم را معادل هما پیاده سازی می فهمند)
http://martinfowler.com/articles/injection.html

mortezaadi
یک شنبه 07 خرداد 1391, 14:52 عصر
منابع spring خیلی زیاده ! حتی میتونید مستندات خود سایت SpringSource را مطالعه کنید که بسیار جامع و کامله ولی اگه خیلی ساده بخواهم جواب بدم

IoC : در واقع شالوده spring هست که نحوه instance گرفتن از کلاس ها و رابطه بین اونها رو ( با استفاده از DI) مدیریت میکنه
bean : شما به بین مثل یک Object نگاه کنید در واقع ما دو جورد بین داریم Managed و un-managed هر Bean که توسط IoC مدیریت میشه بهش میگن Managed bean
در ضمن این بین ها هم طول عمر دارند هم نوع instance گرفتنشون میتونه متفاوت باشه ( singletone یا prototype و....)
Aspect Oriented Programming : بعضی وقتها نیاز دارید کاری رو در طول n کلاس یا n متد انجام بدید مثلا میخواهید قبل از اجرای query کانشکش رو باز کنید query را اجرا کنید و کانکشن رو ببندید!
شما میتونید یک aspect بنویسید که مثلا هر جایی در هر کلاسی اگه تابعی بود که با Save شروع میشد بیاد کانشکشن رو باز کنه اون تابع رو اجرا کنه بعد کانکشن رو ببنده
اینطوری لازم نیست کد باز و بسته کردن کانکشن رو در همه کلاسها کپی کنی
dependency Injection : که مهمترین اصل اسپریگ میباشد برای کم کردن ( ازبین بردن) وابستگی کلاس ها به یکدیگر بوجود اومده مثلا اگه شما کلاسی به نام Car داشته باشید و یک کلاس از نوع engine
بعد بخواهید در برنامه یک Object داشته باشید از ماشین که یک engine داشته باشده

کلاس هاتون باید اینطور باشند

public class Car {
private Engine engine;
public Car(Engine engine){
thins.engine=engine;
}
}


بعد هرجا نیاز دارید Car myCar = new Car(new Engine();

با اینکار شما کلاس car رو به کلاس engine وابسطه کردید
با کمک DI شما کلاس Car رو جدا مینویسید کلاس Engine رو جدا و در فایل XMl یا Annotation ارتباط بین این دو رو تعریف میکنید و IoC براتون اشیاء را میسازه!
اینطوری اگه کلاس Engine تغییر کنه یا اگه بخواهید کلاس JetEngine که کلاس Engine را extend کرده رو به جای Engine استفاده کنید لازم نیست کد نوشته شده در کلاس هاتون رو تغییر بدید.
یه نکته بسیار مهم اینه که در Spring تاکید بر programing for interface هست یعنی همه چیز باید interface باشه مثلا به جای implementation کلاس Engine شما از Interface کلاستون در reference دادن استفاده میکنید تا تغییر implementation ها ممکن باشه

alireza19330
شنبه 27 خرداد 1391, 14:44 عصر
ممنون از همه دوستان، همونطور که اشاره کردید منابع اسپرینگ زیاد هست و من هم تا حدودی مطالعاتی داشتم و خواستم که اطلاعاتم از مفاهیم اسپرینگ کامل تر و درست تر بشه و بعد به سراغ کد زدن برم. ممنون از همه

gh.abdoli
چهارشنبه 26 فروردین 1394, 11:15 صبح
ممنون از همه دوستان، همونطور که اشاره کردید منابع اسپرینگ زیاد هست و من هم تا حدودی مطالعاتی داشتم و خواستم که اطلاعاتم از مفاهیم اسپرینگ کامل تر و درست تر بشه و بعد به سراغ کد زدن برم. ممنون از همه

اقا دمتون گرم
خواهش می کنم ادامه بدین خیلی منتظر این مطلب بودم.
با تشکر از همه دوستان