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

درس دهم : آموزش مفهوم ارث بری در Bean های Spring

این مقاله قدیمی است، برای مطالعه مقاله جدید بارگذاری شده در این زمینه بر روی عبارت زیر کلیک کنید :

آموزش CI Inheriting Bean-Java Spring

آشنایی با مفهوم ارث بری در Bean ها و کاربرد آن ؟

کد تعیین یک Bean می تواند شامل اطلاعات زیادی ازجمله اطلاعات پیکربندی ، آرگومان های تابع سازنده ، مقادیر خواص های آن و ...باشد . این اطلاعات همچنین می تواند اطلاعات خاصی رادرباره Container آن مثل متد تعریف اولیه ( initialization method ) ، متدهای پیش فرض و ... نیز شامل شود .
کد تعیین یک Bean فرزند ( child ) اطلاعات پیکربندی را از کد تعیین مادر خود به ارث میبرد . البته کدهای تعیین عنصر فرزند می تواند برخی مقادیر ارث برده شده را حذف کرده و یا تغییر دهد . همچنین اطلاعات خاصی را به آن اضافه کند .
ارث بری در تعریف Spring Bean ها ، ربطی به ارث بری کلاس ها در java ندارد ، اما چهارچوب کلی کار یکی است . شما میتوانید تعریف یک Bean مادر را به عنوان الگو قرار داده و هرچند فرزند که میخواهید خصوصیت آن را به ارث ببرد ، از رویش بسازید .
در فایل های پیکربندی اطلاعت مبتنی بر XML ، مادر یک child توسط خاصیت prent آن تعیین شده و بایستی برابر با نام مادر خود باشد .


مثال عملی :

برای درک بهتر مفهوم ارث بری در 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. در مرحله آخر نیز ، محتویات مورد نظر جهت فایل های جاوا ، فایل پیکربندی اطلاعات و سایر فایل ها را برای اجرای برنامه ایجاد نمایید .

کد زیر ، مربوط به فایل پیکربندی اطلاعات پروژه با نام Beans,xml است . در این فایل ما یک شی Bean به نام “helloWorld” را با دو خاصیت messag1 و messag2 تعریف کرده ایم . همچنین شی Bean به نام “helloIndia” را به عنوان فرزند شی “helloWorld” تعیین کرده ایم . برای این منظور مقدار خاصیت parent عنصر فرزند را برابر با نام عنصر مادر قرار داده ایم .
همانطور که در کد مثال مشاهده می کنید ، عنصر فرزند مقدار خاصیت message2 را از مادر خود به ارث برده ، ولی خاصیت message1 را منتقل نکرده و حذف شده است . همچنین این شی یک خاصیت جدید به نام message3 برای خود تعریف کرده است .


?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">

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

      name="message2" value="Hello Second World!"/>

  

 

   id="helloIndia" class="com.tahlildadeh.HelloIndia" parent="helloWorld">

      name="message1" value="Hello India!"/>

      name="message3" value="Namaste India!"/>

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



package com.tahlildadeh;

 

public class HelloWorld {

   private String message1;

   private String message2;

 

   public void setMessage1(String message){

      this.message1  = message;

   }

 

   public void setMessage2(String message){

      this.message2  = message;

   }

 

   public void getMessage1(){

      System.out.println("World Message1 : " + message1);

   }

 

   public void getMessage2(){

      System.out.println("World Message2 : " + message2);

   }

}

کد زیر نیز محتویات فایل HelloIndia,java را تعیین کرده است :



package com.tahlildadeh;

 

public class HelloIndia {

   private String message1;

   private String message2;

   private String message3;

 

   public void setMessage1(String message){

      this.message1  = message;

   }

 

   public void setMessage2(String message){

      this.message2  = message;

   }

 

   public void setMessage3(String message){

      this.message3  = message;

   }

 

   public void getMessage1(){

      System.out.println("India Message1 : " + message1);

   }

 

   public void getMessage2(){

      System.out.println("India Message2 : " + message2);

   }

 

   public void getMessage3(){

      System.out.println("India Message3 : " + message3);

   }

}

در نهایت نیز کد زیر مربوط به فایل MainApp.java است .



package com.tahlildadeh;

 

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

      objA.getMessage2();

 

      HelloIndia objB = (HelloIndia) context.getBean("helloIndia");

      objB.getMessage1();

      objB.getMessage2();

      objB.getMessage3();

   }

}

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



World Message1 : Hello World!

World Message2 : Hello Second World!

India Message1 : Hello India!

India Message2 : Hello Second World!

India Message3 : Namaste India!

اگر به خروجی مثال دقت کنید متوجه می شوید که ما خاصیت message2 را به شی “helloIndia” پاس نداده ایم ، اما به علت ارث بری از مادر خود ، دارای مقدار این خاصیت می باشد .


تعیین یک فایل تعریف Bean به عنوان الگو یا Template

شما میتوانید تعریف یک Bean را به عنوان الگو تعیین کرده و با حداقل کدنویسی ، سایر عناصر فرزند مورد نظر خود را از روی آن بسازید . توجه داشته باشید که در هنگام تعیین یک Bean به عنوان عنصر مادر ( Parent ) نبایستی خاصیت class آن را مقدار دهی کرده و از طرف دیگر خاصیت abstract آن را برابر true قرار دهید . همانطور که در کد زیر نشان داده شده است :


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="beanTeamplate" abstract="true">

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

       name="message2" value="Hello Second World!"/>

       name="message3" value="Namaste India!"/>

   

 

    id="helloIndia" class="com.tahlildadeh.HelloIndia" parent="beanTeamplate">

       name="message1" value="Hello India!"/>

       name="message3" value="Namaste India!"/>

در مثال فوق ، شی Bean مادر هیچ گاه نمی تواند تولید و مقدار دهی شده و هیچ نسخه ای از آن ساخته نمی شود . به دلیل اینکه تعریف آن ناقص بوده و همچنین به عنوان یک عنصر abstract ( مطلق ) تعیین شده است . عناصر Bean ای که همانند کد فوق به صورت abstract تعیین می شوند ، فقط قادرند به عنوان یک الگو و template عمل کرده و عناصر دیگر از روی آنها ساخته شوند .


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

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