به نام خدا
فریمورک اسپرینگ این قابلیت را در اختیار ما قرار می دهد تا با استفاده از Factory Method بتوانیم bean را تزریق کنیم. برای انجام این کار، می توانیم از دو خصیصه ی المنت bean استفاده کنیم:
- factory-method: نشان دهنده factory-method ای است که برای تزریق bean فراخوانی می شود.
- 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
کتاب های تجارت الکترونیک
کتاب «آموزش صفر تا صد دیجیتال مارکتینگ»
آموزش دیجیتال مارکتینگ (رشد کسب و کار)
آموزش صفر تا صد سئو – دوره «دکترای سئو»
تومان499,000تومان449,000آموزش وردپرس
مگا دوره نخبگان وردپرس – طراحی سایت بدون کدنویسی
تومان468,000تومان197,000کتاب های تجارت الکترونیک
کتاب صفر تا صد سئو در وردپرس