春天——FactoryBean
Spring 是最流行的Java EE 框架之一。它是一个开源轻量级框架,允许Java EE 7 开发人员构建简单、可靠且可扩展的企业应用程序。该框架主要侧重于提供各种方法来帮助您管理业务对象。与Java数据库连接 (JDBC)、JavaServer Pages (JSP) 和Java Servlet 等经典Java框架和应用程序编程接口 (API) 相比,它使 Web 应用程序的开发更加容易。该框架使用各种新技术,如面向方面编程 (AOP)、普通Java对象 (POJO) 和依赖注入 (DI) 来开发企业应用程序。
Spring 容器有两种类型的 bean:
- 普通 bean - 默认情况下由 Spring 使用。
- 工厂 bean——用于生成由 Spring 框架管理的 bean(对象)。
Factory Bean是一个 bean,它充当创建其他 bean 并使用 Spring IOC 容器实例化它们的工厂。工厂 bean 主要用于实现框架设施,因此它们是特定于框架的,不能在 Spring IOC 容器的范围之外使用。例如:
- JndiObjectFactoryBean – 用于从 JNDI 中查找数据源
- ProxyFactoryBean - 用于使用 AOP 为 bean 创建代理
如何创建工厂bean?
- 我们可以创建一个工厂 bean,我们需要通过我们的(用户定义的)bean 实现 FactoryBean 接口,这将创建其他要由工厂 bean 返回的 bean。
- 一个简单的方法是扩展 AbstractFactoryBean 类。我们需要使用工厂 bean 覆盖 createInstance() 方法来创建目标 bean 的实例。之后,我们需要使用 getObjectType() 方法返回目标 bean 的类型。
- getObjectType() - 此方法将返回工厂 bean 生成的对象类型。
例子
在此示例中,我们将创建一个工厂 bean,该 bean 将根据其部门生成不同类型的学生 bean,并将其 id、first_name 和 last_name 作为每个填充的数据。
第 1 步:创建一个 Maven 项目
在这一步中,我们将创建一个新的 maven 项目,并确保您将创建一个简单的项目(跳过原型选择)。
第 2 步:添加依赖项
现在我们将 Maven 依赖项添加到我们的应用程序中。将以下依赖项添加到您的 pom.xml
XML
4.0.0
com.geeksforgeeks
GeeksForGeeks
0.0.1-SNAPSHOT
org.springframework
spring-beans
5.0.8.RELEASE
org.springframework
spring-context
5.0.8.RELEASE
Java
public class Student {
// member variable
private int id;
private String first_name;
private String last_name;
private String department;
// getters and setters
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getFirst_name() { return first_name; }
public void setFirst_name(String first_name)
{
this.first_name = first_name;
}
public String getLast_name() { return last_name; }
public void setLast_name(String last_name)
{
this.last_name = last_name;
}
public String getDepartment() { return department; }
public void setDepartment(String department)
{
this.department = department;
}
// toStirng() method
@Override public String toString()
{
return "Student [id=" + id + ", first_name="
+ first_name + ", last_name=" + last_name
+ ", department=" + department + "]";
}
}
Java
import org.springframework.beans.factory.config.AbstractFactoryBean;
import com.gfg.model.Student;
public class StudentFactoryBean extends AbstractFactoryBean
XML
Java
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.gfg.model.Student;
public class TestSpringFactoryBean {
@SuppressWarnings("resource")
public static void main(String []args) throws Exception {
// Reading the application-context file using
// class path of spring context xml file
AbstractApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");
// Spring check the blueprint for Student bean
// from application-context.xml file and return it
Student computer_student = (Student)context.getBean("CSE");
System.out.println(computer_student.toString());
}
}
第 3 步:创建模型(Bean)类
在这一步中,我们将创建一个模型类 Student。我们的应用程序的Java 。此类将具有 id、first_name、last_name 和部门作为成员变量。我们将创建它的 getter 和 setters 方法,并提供一个 toString() 方法定义。
Java
public class Student {
// member variable
private int id;
private String first_name;
private String last_name;
private String department;
// getters and setters
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getFirst_name() { return first_name; }
public void setFirst_name(String first_name)
{
this.first_name = first_name;
}
public String getLast_name() { return last_name; }
public void setLast_name(String last_name)
{
this.last_name = last_name;
}
public String getDepartment() { return department; }
public void setDepartment(String department)
{
this.department = department;
}
// toStirng() method
@Override public String toString()
{
return "Student [id=" + id + ", first_name="
+ first_name + ", last_name=" + last_name
+ ", department=" + department + "]";
}
}
第 4 步:创建 StudentFactoryBean 类
在这一步中,我们将创建一个扩展 AbstractFactoryBean 类的 FactoryBean 类,我们还需要实现它的方法 createInstance() 和 getObjectType()。
Java
import org.springframework.beans.factory.config.AbstractFactoryBean;
import com.gfg.model.Student;
public class StudentFactoryBean extends AbstractFactoryBean
第 5 步:Bean 配置
在这一步中,我们将创建一个 spring 配置文件并将其命名为 application-contex.xml。我们将配置我们的 bean 并使用 bean 元素的属性标签来设置学生部门的值。 (注意:在 application-context 中,你需要定义你的工厂 bean 类的整个路径)
XML
第 6 步:创建实用程序类
现在,我们将创建一个 Utility 类来测试我们的工厂 bean 方法。为此创建一个新类并将其命名为 TestSpringFactoryBean。 Java并将以下代码添加到其中。
Java
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.gfg.model.Student;
public class TestSpringFactoryBean {
@SuppressWarnings("resource")
public static void main(String []args) throws Exception {
// Reading the application-context file using
// class path of spring context xml file
AbstractApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");
// Spring check the blueprint for Student bean
// from application-context.xml file and return it
Student computer_student = (Student)context.getBean("CSE");
System.out.println(computer_student.toString());
}
}
输出:
现在,我们将运行我们的应用程序。