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

آموزش 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 استفاده کنید.

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

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

1. B.java

2. A.java

3. applicationContext.xml

4. Test.java


B.java:

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

1
2
3
4
5
6
package org.sssit; 
public class B { 
B(){System.out.println("b is created");} 
void print(){System.out.println("hello b");} 
}    
<button></button>

A.java:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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(); 
<button></button>

applicationContext.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
< ?xml version="1.0" encoding="UTF-8" ?>
 
         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
   
< bean id="b" class="org.sssit.B">< /bean
< bean id="a" class="org.sssit.A" autowire="byName">< /bean
   
< /beans
<button></button>

Test.java:

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

1
2
3
4
5
6
7
8
9
10
11
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(); 
<button></button>

خروجی :

b is created

a is created

hello a

hello b


1- حالت byname Autowiring

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

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

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

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

2- حالت byType Autowiring

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

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

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

1
2
3
4
< 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> 
<button></button>

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


3- حالت constructor Autowiring

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

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

4- حالت no Autowiring

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

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

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

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