مشخصات مقاله
-
504
-
0.0
-
2841
-
0
-
0
آموزش 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>