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

آموزش Auto wiring-Java Spring

راه انداز خودکار (Autowiring)

Autowiring در اسپرینگ

ویژگی Autowiring در فریمورک اسپرینگ این قابلیت را به شما می دهد تا به صورت ضمنی به تزریق وابستگی اشیا بپردازید و برای این کار از تزریق setter یا سازنده استفاده می کند. از ویژگی Autowiring نمی توان برای تزریق مقادیر اولیه و رشته استفاده کرد. این ویژگی تنها با مرجع کار می کند.


مزیت Autowiring :

نوشتن کد کمتر! زیرا دیگر نیاز نداریم صریحاً کد تزریق وابستگی را بنویسیم.


معایب Autowiring :

1- کنترل در اختیار برنامه نویس نیست

2- برای مقادیر اولیه و رشته ها نمی توان از Autowiring استفاده کرد.


حالت های Autowiring :

این ویژگی دارای حالات زیادی است از جمله:

  • No : این حالت پیش فرض Autowiring است و به این معنی است که این ویژگی به طور پیش فرض غیر فعال است.
  • Byname : این حالت بر اساس نام bean ، وابستگی شی را تزریق می کند. در این حالت، نام bean و property باید یکسان باشد. برای تزریق متد setter فراخوانی می شود.
  • Bytype : این حالت بر اساس نوع ، وابستگی شی را تزریق می کند. بنابراین نام bean و property می تواند متفاوت باشد. برای تزریق متد setter فراخوانی می شود.
  • Constructor : این حالت با فراخوانی سازنده کلاس به تزریق وابستگی می پردازد. به این صورت که سازنده ای با تعداد پارامتر بیشتر را فراخوانی می کند.
  • Autodetect : این حالت بعد از نسخه 3 اسپرینگ حذف شد.

مثال Autowiring :

مثالی ساده از کاربرد Autowiring در اسپرینگ را بررسی می کنیم. برای اعمال حالات Autowire ، باید از ویژگی autowire عنصر bean استفاده کنید.

< bean id="a" class="org.sssit.A" autowire="byName">< /bean>    

اکنون مثال کاملی از Autowiring در اسپرینگ را بررسی می کنیم. برای ساخت این مثال چهار فایل زیر را ایجاد کردیم.

1. B.java

2. A.java

3. applicationContext.xml

4. Test.java


B.java:

این کلاس تنها شامل یک سازنده و متد است.

package org.sssit;  
public class B {  
B(){System.out.println("b is created");}  
void print(){System.out.println("hello b");}  
}     

A.java:

: این کلاس شامل مرجع کلاس B و سازنده و متد است.

package org.sssit;  
public class A {  
B b;  
A(){System.out.println("a is created");}  
public B getB() {  
    return b;  
}  
public void setB(B b) {  
    this.b = b;  
}  
void print(){System.out.println("hello a");}  
void display(){  
    print();  
    b.print();  
}  
}  

applicationContext.xml:

< ?xml version="1.0" encoding="UTF-8" ?>

< beans 3. xmlns="http://www.springframework.org/schema/beans"
         4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         5. xmlns:p="http://www.springframework.org/schema/p"
         6. xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  
< bean id="b" class="org.sssit.B">< /bean>  
< bean id="a" class="org.sssit.A" autowire="byName">< /bean>  
  
< /beans>  

Test.java:

این کلاس bean را از فایل applicationContext.xml می گیرد و متد display را فراخوانی می کند.

package org.sssit;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
public class Test {  
public static void main(String[] args) {  
    ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");  
    A a=context.getBean("a",A.class);  
    a.display();  
}  
}  

خروجی :

b is created

a is created

hello a

hello b


1- حالت byname Autowiring

در این حالت، شناسه bean و نام مرجع باید یکسان باشد. این حالت از تزریق setter استفاده می کند.

< bean id="b" class="org.sssit.B">< /bean>  
< bean id="a" class="org.sssit.A" autowire="byName">< /bean>   

اما اگر نام bean را تغییر دهید، وابستگی را تزریق نخواهد کرد. در اینجا مثالی داریم که در آن نام bean را از b به b1 تغییر داده ایم.

< bean id="b1" class="org.sssit.B">< /bean>  
< bean id="a" class="org.sssit.A" autowire="byName">< /bean>  

2- حالت byType Autowiring

در این حالت، شناسه bean و نام مرجع ممکن است متفاوت باشد. اما باید تنها یک bean از هر نوع وجود داشته باشد. این حالت از تزریق setter استفاده می کند.

< bean id="b1" class="org.sssit.B">< /bean>  
< bean id="a" class="org.sssit.A" autowire="byType">< /bean>    

این کد، به درستی کار می کند زیرا یک نمونه از نوع B ایجاد کرده ایم و اهمیتی ندارد که نام bean و نام مرجع متفاوت است. اما اگر چندین bean از یک نوع داشته باشیم، کد کار نمی کند و خطا می دهد. در ادامه کدی را داریم که چندین bean از نوع B دارد.

< bean id="b1" class="org.sssit.B">< /bean>  
< bean id="b2" class="org.sssit.B">< /bean>  
< bean id="a" class="org.sssit.A" autowire="byName">< /bean>  

در این حالت خطا رخ می دهد.


3- حالت constructor Autowiring

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

< bean id="b" class="org.sssit.B">< /bean>  
< bean id="a" class="org.sssit.A" autowire="constructor">< /bean>  

4- حالت no Autowiring

در این حالت، مدیر اسپرینگ وابستگی را با Autowiring تزریق نمی کند.

< bean id="b" class="org.sssit.B">< /bean>  
< bean id="a" class="org.sssit.A" autowire="no">< /bean>   

1398/12/15 2841 504
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

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