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

درس نهم : BeanPostProcessor چیست و چه کاربردی دارد

BeanPostProcessor چیست و چه کاربردی دارد ؟

رابط کاربری BeanPostProcessor ، متدهای وابسته ای را تعیین می کند که به وسلیه آنها میتوانید دستورات برنامه نویسی مورد نظر خود را در برنامه اجرا کنید . شما همچنین می توانید یکسری منطق های کدنویسی را پس از اینکه Spring IOC Container یک شی Bean را مقدار دهی ، تنظیم و ایجاد نمود ، تعیین و اجرا نمایید . این کار بوسیله متصل کردن یک یا چند BeanPostProcessor به برنامه انجام می شود .
شما می توانید چندین رابط کاربردی BeanPostProcessor را در برنامه تعیین نموده و ترتیب اجرای آنها را بوسیله خاصیت crder که توسط رابط ordered هر BeanPostProcessor فراهم شده است ، کنترل کنید .
هر BeanPostProcessor برروی هرنمونه ایجاد شده ازیک Bean یا object عملیات انجام میدهد . به این معنا که ابتدا Spring IOC Container ، نسخه ای از هر Bean را تولید کرده و سپس BeanPostProcessor ، عملیات و کدهای خود را برروی آن انجام می دهد .
یک Application Context ، هر شی Bean ای که در هنگام پیاده سازی رابط Bean Post Processsor تعیین میشود را شناسایی میکند .
پس این Bean هارا به عنوان Post-Processors ثبت نموده ، تا Container برنامه در هنگام ایجاد هر Bean ، به موقع فراخوانی شود .


مثال عملی :

در مثال های عملی زیر به آموزش نوشتن ، ثبت و استفاده از BeanPostProcessor درون یک Applicationtext پرداخته ایم .
برای این منظور یک پروژه جدید Spring را در محیط Eclipse ایجاد نموده و مراحل زیر را انجام دهید :


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

کد زیر محتویات فایل HelloWorld.java را نشان میدهد :



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);

   }

 

   public void init(){

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

   }

 

   public void destroy(){

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

   }

}

مثال فوق ، یک نمونه ساده از پیاده سازی BeanPostProcessor است که در آن نام یک Bean ، قبل و بعد از ایجاد هر نسخه از شی Bean ، چا میشود . شما میتوانید کدهای سطح بالاتری را نیز به قبل و بعد از ایجاد یک Bean اضافه نمایید ، زیرا از طریق هر دو متد موجود در Post Processor به آن Bean دسترسی کامل دارید .
کد زیر نیز محتویات فایل InitHelloWorld.java رانشان میدهد :



package com.tutorialspoint;

 

import org.springframework.beans.factory.config.BeanPostProcessor;

import org.springframework.beans.BeansException;

 

public class InitHelloWorld implements BeanPostProcessor {

 

   public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {

      System.out.println("BeforeInitialization : " + beanName);

      return bean;  // you can return any other object as well

   }

 

   public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

      System.out.println("AfterInitialization : " + beanName);

      return bean;  // you can return any other object as well

   }

 

}

همچنین کد زیر محتویات فایل اصلی پروژه یا MainApp.java را نشان میدهد . در این فایل نیاز دارید تا یک تله shutdown را که توسط registerShutdownHook() تعیین شده است را در کلاس Abstroct Application Context قرار دهید . قرار دادن این تله shutdown باعث می شود تا برنامه یک خروج مطمئن داشته و پس از اتمام کار ، با اجرای متدهای destroy تعیین شده ، منابع سیستم به طور کامل آزاد شوند .



package com.tutorialspoint;

 

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();

   }

}

کد زیر نیز محتویات مربوط به فایل پیکربندی اطلاعات Beans.xml رانشان داده که در آن متدهای init و 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.tutorialspoint.HelloWorld"

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

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

   

 

    class="com.tutorialspoint.InitHelloWorld" />

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



BeforeInitialization : helloWorld

Bean is going through init.

AfterInitialization : helloWorld

Your Message : Hello World!

Bean will destroy now.

1395/05/19 3932 1430
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

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