میدان ( scope ) یک Beans چیست و چه کاربردی دارد ؟
هنگام تعریف یک شی در این درس ، به بررسی دو حالت اول پرداخته و 3 مورد بعدی را پس از اینکه راجع به برنامه های تحت وب Spring صحبت کردیم ، بررسی می کنیم . اگر مقدار خاصیت Scope برروی Singleton تنظیم شده باشد ، Spring IOC Container فقط یک نسخه از شی Bean تعیین شده ایجاد خواهد کرد . این نسخه واحد ایجاد شده ، در یک حافظه کش ( Coche ) مرتبط با شی Bean ذخیره شده و هر بار که درخواست یا برنامه ای ، آن شی
را فراخوانی کند ، نسخه موجود در حافظه برای آن ارسال می شود . اجازه بدهید روند ایجاد یک برنامه Spring و تنظیم خاصیت Scope را در محیط Ecipse باهم به صورت عملی تمرین کنیم . برای این منظور مراحل زیر را به ترتیب انجام دهید : سورس کد فایل HelloWorld بایستی به صورت زیر باشد : همچنین کد زیر ، مربوط به فایل MainApp.java است : در نهایت نیز کد زیر مربوط به فایل Beans.Xml است که در آن خاصیت Scope با مقدار Singleton تنطیم شده است : پس از اینکه محتویات فایل های برنامه و فایل پیکربندی اطلاعات را طبق کدهای فوق تنظیم نمودید ، به اجرای برنامه می پردازیم . اگر همه چیز درست باشد ، بایستی خروجی زیر تولید گردد : اگر مقدار خاصیت Scope برروی prototype تنظیم شود ، Spring IOC Container ، هربار که درخواستی جهت یک شی Bean ارسال می شود ، یک نسخه جدید از آن شی را میسازد . اجازه بدهید روند ایجاد یک برنامه Spring و تنظیم خاصیت Scope را در محیط Ecipse باهم به صورت عملی تمرین کنیم . برای این منظور مراحل زیر را به ترتیب انجام دهید : سورس کد فایل HelloWorld بایستی به صورت زیر باشد : همچنین کد زیر ، مربوط به فایل MainApp.java است : در نهایت نیز کد زیر مربوط به فایل Beans.Xml است که در آن خاصیت Scope با مقدار Singleton تنطیم شده است : پس از اینکه محتویات فایل های برنامه و فایل پیکربندی اطلاعات را طبق کدهای فوق تنظیم نمودید ، به اجرای برنامه می پردازیم . اگر همه چیز درست باشد ، بایستی خروجی زیر تولید گردد :
به طور کلی ، پنج حالت میدان ( Scope ) برای یک Bean در چهارچوب کاری Spring وجود داشته که در جدول زیر به معرفی آنها پرداخته ایم .
3 مدل از این Scope ها مخصوص برنامه های تحت وب Spring هستند :
میدان Singleton Scope
مقدار پیش فرض خاصیت Scope هموارهه Singleton است ، ولی درصورت نیاز و برای اطمینان خاطر بیشتر ، هنگامی که میخواهید برنامه فقط و فقط یک نسخه از Bean تولید کند ، مطابق کد زیر ، مقدار آن را در فایل پیکربندی برنامه برروی Singleton تنظیم کنید :
id="..." class="..." scope="singleton">
مثال عملی :
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);
}
}
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();
}
}
xml version="1.0" encoding="UTF-8"?>
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
Your Message : I'm object A
Your Message : I'm object A
میدان Portotype Scope
به عنوان یک قانون ، از prototype Scope برای تعریف اشیای با ثبات Beans و از Singleton scope برای تعریف اشیای بی ثبات که پایداری نامطمئنی دارند ، استفاده کنید .
برای تعیین یک شی با prototype ، بایستی همانند کد زیر در فایل پیکربندی اطلاعات برنامه مقدار خاصیت Scope را برروی prototype تنظیم نمایید :
id="..." class="..." scope="prototype">
مثال عملی :
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);
}
}
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();
}
}
xml version="1.0" encoding="UTF-8"?>
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
Your Message : I'm object A
Your Message : null