کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

درس هشتم : بررسی چرخه حیات یک Bean در Spring

آشنایی با چرخه حیات یک Bean در Spring

چرخه حیات یک Spring Bean بسیار ساده و قابل فهم است . هنگامی که یک Bean ، ایجاد می شود چند مرحله مقدار دهی اولیه برای آن لازم است تا به یک وضعیت با ثبات برسد . از طرف دیگر ، هنگامی که به یک Bean دیگر نیازی نداریم و بایستی از Container حذف شود ،چند مرحله عملیات پاکسازی بایستی انجام شود .
بنابراین ، از زمان ایجاد تا نابود شدن یک Bean ، مجموعه ای از فعالیت ها در پشت صفحه برنامه رخ میدهد . اما در این درس ، ما فقط دو رویداد ( Callback method ) مهمی که در هنگام ایجاد و ازبین رفتن یک Bean لازم و ضروری هستند را بررسی و تشریح میکنیم .
برای تعیین یک اجرا و پایان جهت هر Bean ، درهنگام تعریف ، آن را با پارامتری مقدار دهی شده destroy-method و init-method در کد خود ، مینویسیم . خاصیت init-method تعیین کننده رویدادی است که به محض ایجاد یک Bean ، فراخوانی و اجرا میشود . همچنین خاصیت destroy-method نیز شامل رویدادی است که به محض حذف یک Bean از Container ، فراخوانی و اجرا میشود .


رویدادهای مقداردهی اولیه ( Initialization Callback )

رابط کاربری org.springframework.beans.factory.InitializingBean یک متد تنها به صورت زیر را تعیین کرده است :



void afterPropertiesSet() throws Exception;

بنابراین شما می توانید رابط کاربری فوق را به برنامه خود اضافه کرده و درون آن ، تمامی کدهایی که میخواهید در مرحله مقدار دهی اولیه و ایجاد یک Bean رخ دهد را در تابع afterpropertiesSet() همانند مثال زیر بنویسید :


public class ExampleBean implements InitializingBean {
   public void afterPropertiesSet() {
      // do some initialization work

   }

}

در فایل های پیکربندی اطلاعات مبتنی بر XML ، شما میتوانید از خاصیت init-method برای تعیین نام یک تابع برای اجرا در مقداردهی اولیه استفاده کنید . این تابع نه خروجی داشته ( Void ) و نه آرگومان دریافت می کند . مثل کد زیر :


 id="exampleBean" 
         class="examples.ExampleBean" init-method="init"/>

همچنین نحوه تعریف کلاس آن نیز به صورت زیر است :


public class ExampleBean {

   public void init() {

      // do some initialization work

   }

}

رویدادهای تخریب شی ( Pestruction Callback ) :

رابطه کاربری +آدرس یک متد تنها را به صورت زیر تعیین کرده است :



void destroy() throws Exception;

بنابراین شما می توانید رابطه کاربری فوق را به برنامه خود اضافه کرده و درون آن ، کارهایی که میخواهید در زمان ازبین رفتن یک Bean رخ دهد را در تابع destroy() به صورت زیر قراردهید :



public class ExampleBean implements DisposableBean {

   public void destroy() {

      // do some destruction work

   }

}

در فایل های پیکربندی اطلاعات مبتنی بر XML ، شما میتوانید از خاصیت destroy-method برای اجرا در هنگام تخریب کد شی Bean استفاده کنید . این تابع نه خروجی داشته (Void است ) و نه آرگومانی دریافت می کند . همانند کد زیر :


id="exampleBean"

         class="examples.ExampleBean" destroy-method="destroy"/>

همچنین نحوه تعریف کلاس آن نیز به صورت زیر است :



public class ExampleBean {

   public void destroy() {

      // do some destruction work

   }

}

اگر شما درحال استفاده از Spring IOC Container در یک محیط غیر وب ، مثل یک نرم افزار سطح بالای تحت کلاینت هستید ، میتوانید به وسیله JVM یک تله برای خاموش شدن برنامه خود تعیین کنید .
انجام کار فوق باعث اجرای یک Shutdown بسیار خوب در سیستم شده و تمامی رویدادهای مرتبط با عملیات تخریب اشیای Bean یا ( destroy ) را به درستی اجرا می کند . بنابراین کلید منابع سیستم به طور صحیح آزاد می شوند .
توصیه ما به شما این است که حدامکان از توابع DisposableBean و Initialization در برنامه های خود استفاده نکنید . به جای آنها از XML بهره بگیرید ، زیرا انعطاف پذیری بهتری در نام دهی به متدهای برنامه شما دارد .
مثال عملی : با ارایه یک مثال عملی در محیط کاری برنامه Eclipse ، مطالب آموزشی فوق رادر عمل بررسی خواهیم کرد . برای این منظور ، مراحل زیر را انجام دهید :


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

  package com.tahlildadeh;

  

  public class HelloWorld {

     private String message;

  

   public void setMessage(String message){

       this.message  = message;

   }

    public void getMessage(){

      System.out.println("Your Message : " + message);

    }

    public void init(){

       System.out.println("Bean is going through init.");

  }

    public void destroy(){

      System.out.println("Bean will destroy now.");

    }

 }

کد زیر نیز مربوط به فایل MainApp. java می باشد . در این کد نیاز دارید تا یک تله Shutdown را به نام registershutdownHook() به کلاس AbstractApplicationContent اضافه کنید . این تله که درواقع یک متد destroy () است ، در هنگام ازبین رفتن هرشی رخ داده و کلیه عملیاتهای تعیین شده برای تخریب شی را انجام داده منابع سیستم ( حافظه ، کش و... ) را آزاد می کند :



package com.tahlildadeh;

import org.springframework.context.support.AbstractApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class MainApp {

   public static void main(String[] args) {

      AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");

      obj.getMessage();

      context.registerShutdownHook();

   }

}

کد زیر نیز مربوط به فایل پیکربندی اطلاعات Bean.Xml است که در آن متدهای مربوط به destroy تعیین شده اند :


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.tahlildadeh.HelloWorld"

       init-method="init" destroy-method="destroy">

        name="message" value="Hello World!"/>

پس از ایجاد فایل های اصلی برنامه و فایل پیکربندی اطلاعات ، میتوانید پروژه را اجرا نمایید . اگر همه چیز درست باشد ، برنامه خروجی زیر را تولید خواهد کرد :



Bean is going through init.

Your Message : Hello World!

Bean will destroy now.

متدهای مقداردهی اولیه و تخریب پیش فرض برنامه

اگر در برنامه خود تعداد زیادی Bean با متدهای initialization و destroy با نام مشابه دارید ، لازم نیست تا برای هر Bean متدهای init-method و destroy-method را بنویسید .
به جای این کار میتوانید از قابلیت ویژه چهارچوب Spring برای تعیین متدهای پیش فرض تولید اولیه و تخریب Bean ها استفاده کنید . این متدها درصورتی که یک Bean ، متدهای از پیش تعیین شده نداشته باشد ، برآن اعمال میشوند . برای این منظور بایستی از متدهای default-init-method و default-destroy-method در المنت برنامه به صورت زیر استفاده کنید :


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"

    default-init-method="init" 

    default-destroy-method="destroy">


    id="..." class="...">
1395/05/19 4152 1488
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

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