یه تابستون متفاوت با یه تصمیم هوشمندانه! دوره هوش مصنوعی با تخفیف ویژه، فقط با کد AI84 دوره هوش مصنوعی با تخفیف ویژه، فقط با کد AI84
🎯 ثبت نام

درس هفتم : آموزش تعیین میدان Beans Scope در Spring

میدان ( scope ) یک Beans چیست و چه کاربردی دارد ؟

هنگام تعریف یک شی در چهارچوب کاری Spring ، شما می توانید یک میدان ( Scope ) برای آن تعیین کنید . اما میدان ( Scape ) چیست و چه کارایی دارد . برای مثال فرض کنید شما میخواهید تا برنامه Spring را مجبور کنید ، هر زمان که به یک شی Bean نیاز دارید ، یک نسخه جدید از آن را بسازید . برای این منظور بایستی مقدار خاصیت Scope آن را برروی prototype قرار دهید . از طرف دیگر ، برخی مواقع می خواهید برنامه Spring هرزمان که یک شی Bean را لازم دارد ، همان نسخه قبلی ساخته شده را برگرداند و یک نسخه جدید تولید نکند . برای این منظور نیز بایستی مقدار خاصیت Scope را برروی singleton قرار دهید .
به طور کلی ، پنج حالت میدان ( 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 باهم به صورت عملی تمرین کنیم . برای این منظور مراحل زیر را به ترتیب انجام دهید :


  1. یک پروژه جدید با نام Spring Example ایجاد کرده و یک پکیج با نام Com.tahlildadeh را به پوشه src پروژه اضافه کنید .
  2. همانطور که در درس آموزش ایجاد اولین برنامه Spring نشان دادیم ، کتابخانه های لازم جهت برنامه خود را به وسیله دکمه Add External JARs به پروژه اضافه کنید .
  3. در زیر مجموعه پکیج Com.tahlildadeh ، کلاس های جاوا Hello World و Main App را ایجاد نمایید .
  4. در پوشه Src ، فایل پیکربندی اطلاعات Beans Configuration را با نام Beans.Xml ایجاد نمایید .
  5. در مرحله آخر نیز ، محتویات مورد نظر جهت فایل های جاوا ، فایل پیکربندی اطلاعات و سایر فایل ها را برای اجرای برنامه ایجاد نمایید .

سورس کد فایل 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 باهم به صورت عملی تمرین کنیم . برای این منظور مراحل زیر را به ترتیب انجام دهید :


  1. یک پروژه جدید با نام Spring Example ایجاد کرده و یک پکیج با نام com.tahlildadeh را به پوشه src پروژه اضافه کنید .
  2. همانطور که در درس آموزش ایجاد اولین برنامه Spring نشان دادیم ، کتابخانه های لازم جهت برنامه خود را به وسیله دکمه Add External JARs به پروژه اضافه کنید .
  3. در زیر مجموعه پکیج Com.tahlildadeh ، کلاس های جاوا HelloWorld و MainApp را ایجاد نمایید .
  4. در پوشه Src ، فایل پیکربندی اطلاعات Beans Configuration را با نام Beans.Xml ایجاد نمایید .
  5. در مرحله آخر نیز ، محتویات مورد نظر جهت فایل های جاوا ، فایل پیکربندی اطلاعات و سایر فایل ها را برای اجرای برنامه ایجاد نمایید .

سورس کد فایل 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>
1395/05/17 4551 1506
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...