Tiêm phụ thuộc với phương pháp nhà máy vào mùa xuân

Spring framework cung cấp cơ sở để tiêm đậu bằng phương pháp nhà máy. Để làm như vậy, chúng ta có thể sử dụng hai thuộc tính của phần tử bean.

lap-trinh-java-Spring
Dependency Injection with Factory Method in Spring
  1. Phương thức nhà máy: đại diện cho phương pháp nhà máy sẽ được gọi để tiêm đậu.
  2. Factory-bean: đại diện cho tham chiếu của bean mà phương thức nhà máy sẽ được gọi. Nó được sử dụng nếu phương thức nhà máy là không tĩnh.

Một phương thức trả về thể hiện của một lớp được gọi là phương thức Factory .

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

Các loại phương pháp nhà máy

Có thể có ba loại phương pháp nhà máy:

1) Một phương thức nhà máy tĩnh trả về thể hiện của lớp của chính nó . Nó được sử dụng trong mẫu thiết kế singleton.

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

2) Một phương thức nhà máy tĩnh trả về thể hiện của một lớp khác . Nó được sử dụng không được biết và quyết định trong thời gian chạy.

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

3) Một phương thức nhà máy không tĩnh trả về thể hiện của một lớp khác . Nó được sử dụng không được biết và quyết định trong thời gian chạy.

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

Loại 1

Chúng ta hãy xem mã đơn giản để thêm phụ thuộc bằng phương pháp tĩnh nhà máy.

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

Chúng ta hãy xem ví dụ đầy đủ để tiêm phụ thuộc bằng phương pháp nhà máy vào mùa xuân. Để tạo ví dụ này, chúng tôi đã tạo 3 tệp.

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

A.java

Lớp này là một lớp đơn.

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

Lớp này lấy bean từ tệp applicationContext.xml và gọi phương thức trình thông báo.

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();  
}  
}  

Output:

private constructor
factory method
hello user

Loại 2

Chúng ta hãy xem mã đơn giản để thêm phụ thuộc bằng phương thức tĩnh của nhà máy trả về thể hiện của một lớp khác.

Để tạo ví dụ này, chúng tôi đã tạo ra 6 tệp.

  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();  
}  

Loại 3

Chúng ta hãy xem ví dụ để thêm sự phụ thuộc bằng phương thức nhà máy không tĩnh trả về thể hiện của một lớp khác.

Để tạo ví dụ này, chúng tôi đã tạo ra 6 tệp.

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

Tất cả các tệp đều giống như trước đây, bạn chỉ cần thay đổi 2 tệp: PrintableFactory và 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> 

Output:

hello a

Bài viết gần đây

Tìm hiểu chi tiết bên trong JVM

JVM (Java Virtual Machine) là một máy ảo. Nó cung cấp môi trường runtime, nơi mà mã Java bytecode sẽ được thực thi.

Sự Khác nhau giữa JDK, JRE và JVM

Trước khi thực sự đặt tay gõ các dòng code Java, cài đặt Java thì chúng ta phải hiểu sự khác nhau giữa JDK, JRE và JVM.

Hướng dẫn Cài đặt đường dẫn PATH trong Java

Nếu bạn tạo dự án Java bên ngoài thư mục JDK / bin, thì cần phải thiết lập đường dẫn của JDK. Đây là 2 cách cài đặt đường dẫn path trong Java.

Cách hoạt động của Chương trình Java: Hello Java

Tìm hiểu những gì xảy ra trong khi biên dịch và chạy chương trình java. Hơn nữa, chúng ta sẽ làm rõ một số câu hỏi ở chương trình Hello Java của chúng ta.

Viết Chương trình Java đầu tiên: Hello Java

Trong bài hướng dẫn này, chúng ta sẽ học cách viết chương trình đơn giản đầu tiên với ngôn ngữ lập trình Java. Qua bài này bạn sẽ biết cách viết Java, Compile và chạy một chương trình Java bất kỳ

So sánh JAVA vs C++

Hôm nay trong bài viết này mình sẽ so sánh Java vs C++. Còn nếu bạn muốn đọc thêm về so sánh Java vs PHP hay Java với C# thì xem thêm tại đây:

Leave a reply

Please enter your comment!
Please enter your name here