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

آموزش Constructor Injection VS Setter Injection-Java Spring

Factory method (متد factory)

تزریق وابستگی توسط متد factory در اسپرینگ

فریمورک اسپرینگ به شما این قابلیت را می دهد تا با استفاده از متد factory ، bean تزریق کنید. به این منظور از دو ویژگی عنصر bean استفاده می کنیم.

1- Factory-method : نشانگر متد factory ای است که برای تزریق bean فراخوانی می شود.

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

متدی که نمونه ای از یک کلاس را باز میگرداند، متد factory نام دارد.

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

انواع متد factory

سه نوع متد factory وجود دارد:

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

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

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

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

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

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

نوع 1

یک مثال ساده از تزریق وابستگی توسط متد factory ایستا را بررسی می کنیم.

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

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

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

مثالی ساده از تزریق وابستگی توسط متد factory ایستا را بررسی می کنیم که یک نمونه از کلاس دیگر را باز می گرداند. برای این مثال 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 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="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

مثالی از تزریق وابستگی توسط متد factory غیر ایستا را بررسی می کنیم که یک نمونه از کلاس دیگر را باز میگرداند. برای این مثال 6 فایل ایجاد کرده ایم.

1. Printable.java

2. A.java

3. B.java

4. PrintableFactory.java

5. applicationContext.xml

6. Test.java


همه فایل ها مشابه فایل های قبل هستند. تنها دو فایل PrintableFactory و pplicationContext.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 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="pfactory" class="com.javatpoint.PrintableFactory">< /bean>  
< bean id="p" class="com.javatpoint.PrintableFactory" factory-method="getPrintable"
         11. factory-bean="pfactory">< /bean>  
  
< /beans>        

خروجی :

hello a

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

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