یه بار برای همیشه، فرانت‌ اند رو اصولی یاد بگیر! یه بار برای همیشه، فرانت‌ اند رو اصولی یاد بگیر!
🎯 ثبت نام

آموزش 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 نام دارد.

1
2
3
4
5
6
public class A { 
public static A getA(){//factory method 
    return new A(); 
<button></button>

انواع متد factory

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

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

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

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

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

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

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

نوع 1

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

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

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

1. A.java

2. applicationContext.xml

3. Test.java


A.java :

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

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

applicationContext.xml :

1
2
3
4
5
6
7
8
9
10
11
12
< ?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="a" class="com.javatpoint.A" factory-method="getA">< /bean
    
< /beans>    
<button></button>

Test.java:

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

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

خروجی :

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

1
2
3
4
5
package com.javatpoint; 
public interface Printable { 
void print(); 
}    
<button></button>

A.java

1
2
3
4
5
6
7
8
9
package com.javatpoint; 
public class A implements Printable{ 
    @Override 
    public void print() { 
        System.out.println("hello a"); 
    
   
}    
<button></button>

B.java

1
2
3
4
5
6
7
8
package com.javatpoint; 
public class B implements Printable{ 
    @Override 
    public void print() { 
        System.out.println("hello b"); 
    
}     
<button></button>

PrintableFactory.java

1
2
3
4
5
6
7
8
package com.javatpoint; 
public class PrintableFactory { 
public static Printable getPrintable(){ 
    //return new B(); 
          return new A();//return any one instance, either A or B 
}     
<button></button>

applicationContext.xml

1
2
3
4
5
6
7
8
9
10
11
12
< ?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="p" class="com.javatpoint.PrintableFactory" factory-method="getPrintable">< /bean
   
< /beans>       
<button></button>

Test.java:

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

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

خروجی :

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

1
2
3
4
5
6
7
8
package com.javatpoint; 
public class PrintableFactory { 
//non-static factory method 
public Printable getPrintable(){ 
    return new A();//return any one instance, either A or B 
}      
<button></button>

applicationContext.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
< ?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="pfactory" class="com.javatpoint.PrintableFactory">< /bean
< bean id="p" class="com.javatpoint.PrintableFactory" factory-method="getPrintable"
         11. factory-bean="pfactory">< /bean
   
< /beans>       
<button></button>

خروجی :

hello a

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

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