میدان ( scope ) یک Beans چیست و چه کاربردی دارد ؟
هنگام تعریف یک شی
به طور کلی ، پنج حالت میدان ( Scope ) برای یک Bean در چهارچوب کاری Spring وجود داشته که در جدول زیر به معرفی آنها پرداخته ایم .
3 مدل از این Scope ها مخصوص برنامه های تحت وب Spring هستند :
- Singleton : این حالت که مقدار پیش فرض ( default ) برنامه هم هست ، هر زمان که به یک شی نیاز دارید ، نسخه تولید شده قبلی آن را به IOC Container می دهد .
- Prototype : در این حالت ، در زمان درخواست هرشی Bean ، برنامه نسخه جدیدی از آن را ساخته و بنابراین هرشی میتواند در آن واحد چندین نسخه از خود داشته باشد .
- Request : این خاصیت ایجاد یک نسخه جدید از شی Bean را به درخواست HTTP سرور مرتبط میکند و مختص برنامه های تحت وب Spring است .
- Session : این خاصیت نیز ایجاد یک نسخه جدید از شی Bean را به وضعیت Session وب مرتبط کرده و فقط مختص برنامه های تحت وب Spring است .
- Global_session : این خاصیت نیز ایجاد یک نسخه از شی Bean را به درخواست سراسری Http سرور مرتبط کرده و مختص برنامه های تحت وب Spring است .
در این درس ، به بررسی دو حالت اول پرداخته و 3 مورد بعدی را پس از اینکه راجع به برنامه های تحت وب Spring صحبت کردیم ، بررسی می کنیم .
میدان Singleton Scope
اگر مقدار خاصیت Scope برروی Singleton تنظیم شده باشد ، Spring IOC Container فقط یک نسخه از شی Bean تعیین شده ایجاد خواهد کرد . این نسخه واحد ایجاد شده ، در یک حافظه کش ( Coche ) مرتبط با شی Bean ذخیره شده و هر بار که درخواست یا برنامه ای ، آن شی
را فراخوانی کند ، نسخه موجود در حافظه برای آن ارسال می شود .
مقدار پیش فرض خاصیت Scope هموارهه Singleton است ، ولی درصورت نیاز و برای اطمینان خاطر بیشتر ، هنگامی که میخواهید برنامه فقط و فقط یک نسخه از Bean تولید کند ، مطابق کد زیر ، مقدار آن را در فایل پیکربندی برنامه برروی Singleton تنظیم کنید :
1 | id= "..." class = "..." scope= "singleton" ><button></button> |
اجازه بدهید روند ایجاد یک برنامه Spring و تنظیم خاصیت Scope را در محیط Ecipse باهم به صورت عملی تمرین کنیم . برای این منظور مراحل زیر را به ترتیب انجام دهید :
- یک پروژه جدید با نام Spring Example ایجاد کرده و یک پکیج با نام Com.tahlildadeh را به پوشه src پروژه اضافه کنید .
- همانطور که در درس آموزش ایجاد اولین برنامه Spring نشان دادیم ، کتابخانه های لازم جهت برنامه خود را به وسیله دکمه Add External JARs به پروژه اضافه کنید .
- در زیر مجموعه پکیج Com.tahlildadeh ، کلاس های جاوا Hello World و Main App را ایجاد نمایید .
- در پوشه Src ، فایل پیکربندی اطلاعات Beans Configuration را با نام Beans.Xml ایجاد نمایید .
- در مرحله آخر نیز ، محتویات مورد نظر جهت فایل های جاوا ، فایل پیکربندی اطلاعات و سایر فایل ها را برای اجرای برنامه ایجاد نمایید .
سورس کد فایل HelloWorld بایستی به صورت زیر باشد :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package com.tutorialspoint; public class HelloWorld { private String message; public void setMessage(String message){ this .message = message; } public void getMessage(){ System.out.println( "Your Message : " + message); } } <button></button> |
همچنین کد زیر ، مربوط به فایل MainApp.java است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package com.tutorialspoint; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "Beans.xml" ); HelloWorld objA = (HelloWorld) context.getBean( "helloWorld" ); objA.setMessage( "I'm object A" ); objA.getMessage(); HelloWorld objB = (HelloWorld) context.getBean( "helloWorld" ); objB.getMessage(); } } <button></button> |
در نهایت نیز کد زیر مربوط به فایل Beans.Xml است که در آن خاصیت Scope با مقدار Singleton تنطیم شده است :
1 2 3 4 5 6 7 8 9 10 11 12 13 | xml version= "1.0" encoding= "UTF-8" ?> xsi:schemaLocation="http: //www.springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring-beans-3.0.xsd"> id= "helloWorld" class = "com.tutorialspoint.HelloWorld" scope= "singleton" ><button></button> |
پس از اینکه محتویات فایل های برنامه و فایل پیکربندی اطلاعات را طبق کدهای فوق تنظیم نمودید ، به اجرای برنامه می پردازیم . اگر همه چیز درست باشد ، بایستی خروجی زیر تولید گردد :
1 2 3 4 5 | Your Message : I'm object A Your Message : I'm object A <button></button> |
میدان Portotype Scope
اگر مقدار خاصیت Scope برروی prototype تنظیم شود ، Spring IOC Container ، هربار که درخواستی جهت یک شی Bean ارسال می شود ، یک نسخه جدید از آن شی را میسازد .
به عنوان یک قانون ، از prototype Scope برای تعریف اشیای با ثبات Beans و از Singleton scope برای تعریف اشیای بی ثبات که پایداری نامطمئنی دارند ، استفاده کنید .
برای تعیین یک شی با prototype ، بایستی همانند کد زیر در فایل پیکربندی اطلاعات برنامه مقدار خاصیت Scope را برروی prototype تنظیم نمایید :
1 | id= "..." class = "..." scope= "prototype" ><button></button> |
اجازه بدهید روند ایجاد یک برنامه Spring و تنظیم خاصیت Scope را در محیط Ecipse باهم به صورت عملی تمرین کنیم . برای این منظور مراحل زیر را به ترتیب انجام دهید :
- یک پروژه جدید با نام Spring Example ایجاد کرده و یک پکیج با نام com.tahlildadeh را به پوشه src پروژه اضافه کنید .
- همانطور که در درس آموزش ایجاد اولین برنامه Spring نشان دادیم ، کتابخانه های لازم جهت برنامه خود را به وسیله دکمه Add External JARs به پروژه اضافه کنید .
- در زیر مجموعه پکیج Com.tahlildadeh ، کلاس های جاوا HelloWorld و MainApp را ایجاد نمایید .
- در پوشه Src ، فایل پیکربندی اطلاعات Beans Configuration را با نام Beans.Xml ایجاد نمایید .
- در مرحله آخر نیز ، محتویات مورد نظر جهت فایل های جاوا ، فایل پیکربندی اطلاعات و سایر فایل ها را برای اجرای برنامه ایجاد نمایید .
سورس کد فایل HelloWorld بایستی به صورت زیر باشد :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package com.tutorialspoint; public class HelloWorld { private String message; public void setMessage(String message){ this .message = message; } public void getMessage(){ System.out.println( "Your Message : " + message); } } <button></button> |
همچنین کد زیر ، مربوط به فایل MainApp.java است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package com.tutorialspoint; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "Beans.xml" ); HelloWorld objA = (HelloWorld) context.getBean( "helloWorld" ); objA.setMessage( "I'm object A" ); objA.getMessage(); HelloWorld objB = (HelloWorld) context.getBean( "helloWorld" ); objB.getMessage(); } } <button></button> |
در نهایت نیز کد زیر مربوط به فایل Beans.Xml است که در آن خاصیت Scope با مقدار Singleton تنطیم شده است :
1 2 3 4 5 6 7 8 9 10 11 12 13 | xml version= "1.0" encoding= "UTF-8" ?> xsi:schemaLocation="http: //www.springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring-beans-3.0.xsd"> id= "helloWorld" class = "com.tutorialspoint.HelloWorld" scope= "prototype" ><button></button> |
پس از اینکه محتویات فایل های برنامه و فایل پیکربندی اطلاعات را طبق کدهای فوق تنظیم نمودید ، به اجرای برنامه می پردازیم . اگر همه چیز درست باشد ، بایستی خروجی زیر تولید گردد :
1 2 3 4 5 | Your Message : I'm object A Your Message : null <button></button> |