关于Spring工厂方法注入属性方式

 更新时间:2025年04月11日 10:57:52   作者:长不大的大灰狼  
这篇文章主要介绍了关于Spring工厂方法注入属性方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

静态工厂注入

在 Spring 中,也可以使用静态工厂的方式实例化 Bean。此种方式需要提供一个静态工厂方法创建 Bean 的实例。

① 创建实体类

public class Person{
	String name;
	public void setName(String name){
		this.name = name;
    }
}

② 创建静态工厂类

创建一个名为 MyBeanFactory 的类,并在该类中创建一个名为 createBean() 的静态方法,用于创建 Bean 的实例,如下所示。

public class MyBeanFactory {
    // 创建Bean实例的静态工厂方法
    public static Person createBean() {
    	Person person = new Person();
    	person.setName("glp");
        return person;
    }
}

③ 创建 Spring 配置文件

创建 Spring 的配置文件 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.2.xsd">
    
    <bean id="person" class="com.mengma.instance.static_factory.MyBeanFactory"
        factory-method="createBean" />
        
</beans>

上述代码中,定义了一个 id 为 person 的 Bean,其中 class 属性指定了其对应的工厂实现类为 MyBeanFactory,而 factory-method 属性用于告诉 Spring 容器调用工厂类中的 createBean() 方法获取 Bean 的实例。

实例工厂注入

在 Spring 中,还有一种实例化 Bean 的方式就是采用实例工厂,直接在成员方法中创建 Bean 的实例。

同时,在配置文件中,需要实例化的 Bean 也不是通过 class 属性直接指向其实例化的类,而是通过 factory-bean 属性配置一个实例工厂,然后使用 factory-method 属性确定使用工厂中的哪个方法。

① 创建实体类

public class Person{
	String name;
	public void setName(String name){
		this.name = name;
    }
}

② 创建实例工厂类

创建一个名为 MyBeanFactory 的类。

public class MyBeanFactory {
    public MyBeanFactory() {
        System.out.println("person3工厂实例化中");
    }
    // 创建Bean的方法
    public Person createBean() {
        Person person = new Person();
    	person.setName("cbj");
        return person;
    }
}

③ 创建 Spring 配置文件

创建 Spring 的配置文件 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.2.xsd">
    
    <!-- 配置实例工厂 -->
    <bean id="myBeanFactory" class="com.mengma.instance.factory.MyBeanFactory" />
    
    <!-- factory-bean属性指定一个实例工厂,factory-method属性确定使用工厂中的哪个方法 -->
    
    <bean id="person" factory-bean="myBeanFactory" factory-method="createBean" />
    
</beans>

上述代码中,首先配置了一个实例工厂 Bean,然后配置了需要实例化的 Bean。

在 id 为 person的 Bean 中,使用 factory-bean 属性指定一个实例工厂,该属性值就是实例工厂的 id 属性值。

使用 factory-method 属性确定使用工厂中的 createBean() 方法。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Springboot jdbctemplate整合实现步骤解析

    Springboot jdbctemplate整合实现步骤解析

    这篇文章主要介绍了Springboot jdbctemplate整合实现步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Spring Boot配置元数据方法教程

    Spring Boot配置元数据方法教程

    这篇文章主要介绍了Spring Boot配置元数据方法教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Spring整合Mybatis思路梳理总结

    Spring整合Mybatis思路梳理总结

    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作,本篇文章带你了解Spring整合Mybatis的思路
    2022-02-02
  • java设计模式之工厂方法模式

    java设计模式之工厂方法模式

    这篇文章主要为大家详细介绍了java设计模式之工厂方法模式,什么是java工厂方法模式,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • spring事物传播propagation类别含义详解

    spring事物传播propagation类别含义详解

    这篇文章主要介绍了spring事物传播propagation类别含义详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • MyBatis动态SQL与MyBatis Generator插件使用教程

    MyBatis动态SQL与MyBatis Generator插件使用教程

    动态SQL是Mybatis的强大特性之⼀,能够完成不同条件下不同的sql拼接,本文给大家介绍MyBatis动态SQL与MyBatis Generator插件使用,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • 基于@AllArgsConstructor与@Value共用的问题解决

    基于@AllArgsConstructor与@Value共用的问题解决

    这篇文章主要介绍了基于@AllArgsConstructor与@Value共用的问题解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java使用OpenCV进行图像处理的示例代码

    Java使用OpenCV进行图像处理的示例代码

    OpenCV是一个开源的计算机视觉库,广泛应用于图像处理、机器学习和计算机视觉等领域,尽管OpenCV主要使用C/C++进行开发,但它也为Java提供了绑定,使得Java开发者能够利用其强大的图像处理功能,在本篇文章中,我们将详细介绍如何在Java中使用OpenCV,需要的朋友可以参考下
    2025-03-03
  • LambdaQueryWrapper的实现原理分析和lambda的序列化问题

    LambdaQueryWrapper的实现原理分析和lambda的序列化问题

    这篇文章主要介绍了LambdaQueryWrapper的实现原理分析和lambda的序列化问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • 浅谈maven的jar包和war包区别 以及打包方法

    浅谈maven的jar包和war包区别 以及打包方法

    下面小编就为大家分享一篇浅谈maven的jar包和war包区别 以及打包方法,具有很好的参考价值,希望对大家有所帮助
    2017-11-11

最新评论