ضعیفبد نیستمتوسطخوبعالی (3 votes, average: 5٫00 out of 5)
Loading...

تزریق وابستگی با استفاده از Factory Method در اسپرینگ

به نام خدا

فریمورک اسپرینگ این قابلیت را در اختیار ما قرار می دهد تا با استفاده از Factory Method بتوانیم bean را تزریق کنیم. برای انجام این کار، می توانیم از دو خصیصه ی المنت bean استفاده کنیم:

  1. factory-method: نشان دهنده factory-method ای است که برای تزریق bean فراخوانی می شود.
  2. factory-bean: نشان دهنده ارجاعی به bean است که توسط آن factory-method فراخوانی می شود و اگر factory-method یک متود غیر استاتیک باشد از آن استفاده می شود.

به متودی که یک نمونه از یک کلاس را بر می گرداند factory-method گفته می شود.

public class A {  
public static A getA(){//factory method  
    return new A();  
}  
}


انواع factory-method

سه نوع factory-method وجود دارد:

1) static factory-method که یک نمونه از کلاس خودش را برمی گرداند و در الگوی طراحی singleton استفاده می شود.

<bean id="a" class="com.javatpoint.A" factory-method="getA"></bean>

2) static factory method که یک نمونه از کلاس دیگری را برمی گرداند. این نمونه از قبل مشخص نیست و در زمان اجرا در مورد آن تصمیم گیری می شود.

<bean id="b" class="com.javatpoint.A" factory-method="getB"></bean>

3) non-static factory method که نمونه ای از یک کلاس دیگر را برمی گرداند. این نمونه از قبل مشخص نیست و در زمان اجرا در مورد آن تصمیم گیری می شود.

<bean id="a" class="com.javatpoint.A"> </bean>  
<bean id="b" class="com.javatpoint.A" factory-method="getB" factory-bean="a"> </bean>

________________________________________

نوع 1

در زیر نمونه ای از یک قطعه کد برای تزریق وابستگی با استفاده از static factory method را مشاهده می کنید:

<bean id="a" class="com.javatpoint.A" factory-method="getA"></bean>

حال مثال کاملی از تزریق وابستگی با استفاده از factory method را در فریمورک اسپرینگ خواهیم دید. برای ایجاد این مثال، سه فایل زیر را ایجاد کرده ایم:

1. A.java
2. applicationContext.xml
3. Test.java

A.java

این کلاس یک کلاس singleton است.

package com.javatpoint;  
public class A {  
private static final A obj=new A();  
private A(){System.out.println("private constructor");}  
public static A getA(){  
    System.out.println("factory method ");  
    return obj;  
}  
public void msg(){  
    System.out.println("hello user");  
}  
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans  
xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xmlns:p="http://www.springframework.org/schema/p"  
xsi:schemaLocation="http://www.springframework.org/schema/beans   
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  
<bean id="a" class="com.javatpoint.A" factory-method="getA"></bean>  
    
</beans>

Test.java

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

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=(A)context.getBean("a");  
    a.msg();  
}  
}

خروجی:

private constructor
factory method
hello user

________________________________________

نوع 2

حالا به بررسی نمونه کدی می پردازیم که با استفاده از static factory method ای که یک نمونه از کلاس دیگر را برمی گرداند، تزریق وابستگی را انجام می دهد.

برای ایجاد این مثال، 6 فایل زیر را ایجاد کرده ایم:

1. Printable.java
2. A.java
3. B.java
4. PrintableFactory.java
5. applicationContext.xml
6. Test.java

Printable.java

package com.javatpoint;  
public interface Printable {  
void print();  
}

A.java

package com.javatpoint;  
public class A implements Printable{  
    @Override  
    public void print() {  
        System.out.println("hello a");  
    }  
  
}

B.java

package com.javatpoint;  
public class B implements Printable{  
    @Override  
    public void print() {  
        System.out.println("hello b");  
    }  
}

PrintableFactory.java

package com.javatpoint;  
public class PrintableFactory {  
public static Printable getPrintable(){  
    //return new B();  
          return new A();//return any one instance, either A or B  
}  
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans  
    xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  
<bean id="p" class="com.javatpoint.PrintableFactory" factory-method="getPrintable"></bean>  
  
</beans>

Test.java

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

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");  
    Printable p=(Printable)context.getBean("p");  
    p.print();  
}  
}

خروجی:

hello a

________________________________________

نوع 3

حالا به بررسی نمونه کدی می پردازیم که با استفاده از non-static factory method ای که یک نمونه از کلاس دیگر را برمی گرداند، تزریق وابستگی را انجام می دهد.

برای ایجاد این مثال، 6 فایل زیر را ایجاد کرده ایم:

1. Printable.java
2. A.java
3. B.java
4. PrintableFactory.java
5. applicationContext.xml
6. Test.java

تمام این فایل ها مشابه فایل های قبلی هستند. فقط نیاز به تغییر 2 فایل داریم: PrintableFactory و applicationContext.xml.

PrintableFactory.java

package com.javatpoint;  
public class PrintableFactory {  
//non-static factory method  
public Printable getPrintable(){  
    return new A();//return any one instance, either A or B  
}  
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans  
    xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  
<bean id="pfactory" class="com.javatpoint.PrintableFactory"></bean>  
<bean id="p" class="com.javatpoint.PrintableFactory" factory-method="getPrintable"   
factory-bean="pfactory"></bean>  
  
</beans>

خروجی:

hello a

همچنین ببینید

آموزش فارسی فریم ورک لاراول

آموزش فریم ورک لاراول – قسمت نهم

به نام خالق زیبایی ها با نهمین قسمت از مجموعه پر طرفدار “آموزش فریم ورک …

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *