news 2026/4/15 20:19:44

(16)Bean的实例化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(16)Bean的实例化

Spring为Bean提供了多种实例化方式,通常包括4种方式。(也就是说在Spring中为Bean对象的创建准备了多种方案,目的是:更加灵活)

  • 第一种:通过构造方法实例化
  • 第二种:通过简单工厂模式实例化
  • 第三种:通过factory-bean实例化
  • 第四种:通过FactoryBean接口实例化
    注意:无论哪种实例化方法底层还是通过构造方法实现的

第一种:通过构造方法实例化

实际上我们前面学的都是通过第一种方法:通过构造方法实例化来使得Bean的实例化
第一步:定义一个Bean

packagecom.powernode.spring6.bean;/** * @author 动力节点 * @version 1.0 * @className Vip * @since 1.0 **/publicclassVip{}

第二步:编写简单工厂模式当中的工厂类

packagecom.powernode.spring6.bean;/** * @author 动力节点 * @version 1.0 * @className VipFactory * @since 1.0 **/publicclassVipFactory{publicstaticVipget(){returnnewVip();}}

第三步:在Spring配置文件中指定创建该Bean的方法(使用factory-method属性指定)

<beanid="vipBean"class="com.powernode.spring6.bean.VipFactory"factory-method="get"/>

第四步:编写测试程序

@TestpublicvoidtestSimpleFactory(){ApplicationContextapplicationContext=newClassPathXmlApplicationContext("spring.xml");Vipvip=applicationContext.getBean("vipBean",Vip.class);System.out.println(vip);}

第二种:通过简单工厂模式实例化

第一步:定义一个Bean

packagecom.powernode.spring6.bean;/** * @author 动力节点 * @version 1.0 * @className Vip * @since 1.0 **/publicclassVip{}

第二步:编写简单工厂模式当中的工厂类

packagecom.powernode.spring6.bean;/** * @author 动力节点 * @version 1.0 * @className VipFactory * @since 1.0 **/publicclassVipFactory{publicstaticVipget(){returnnewVip();}}

第三步:在Spring配置文件中指定创建该Bean的方法(使用factory-method属性指定)

<beanid="vipBean"class="com.powernode.spring6.bean.VipFactory"factory-method="get"/>

第四步:编写测试程序

@TestpublicvoidtestSimpleFactory(){ApplicationContextapplicationContext=newClassPathXmlApplicationContext("spring.xml");Vipvip=applicationContext.getBean("vipBean",Vip.class);System.out.println(vip);}

通过factory-bean实例化

这种方式本质上是:通过工厂方法模式进行实例化。
即告诉spring这个构造方法到底在哪里,底层还是通过构造方法实现的
第一步:定义一个Bean

packagecom.powernode.spring6.bean;/** * @author 动力节点 * @version 1.0 * @className Order * @since 1.0 **/publicclassOrder{}

第二步:定义具体工厂类,工厂类中定义实例方法

packagecom.powernode.spring6.bean;/** * @author 动力节点 * @version 1.0 * @className OrderFactory * @since 1.0 **/publicclassOrderFactory{publicOrderget(){returnnewOrder();}}

第三步:在Spring配置文件中指定factory-bean以及factory-method

<!--因为一种产品对应一个工厂,所以要将工厂也要实例化交给spring管理,即注册bean--><beanid="orderFactory"class="com.powernode.spring6.bean.OrderFactory"/><beanid="orderBean"factory-bean="orderFactory"factory-method="get"/>

第四步:编写测试程序

@TestpublicvoidtestSelfFactoryBean(){ApplicationContextapplicationContext=newClassPathXmlApplicationContext("spring.xml");OrderorderBean=applicationContext.getBean("orderBean",Order.class);System.out.println(orderBean);}

通过FactoryBean接口实例化

以上的第三种方式中,factory-bean是我们自定义的,factory-method也是我们自己定义的。
在Spring中,当你编写的类直接实现FactoryBean接口之后,factory-bean不需要指定了,factory-method也不需要指定了。
factory-bean会自动指向实现FactoryBean接口的类,factory-method会自动指向getObject()方法。
第一步:定义一个Bean

packagecom.powernode.spring6.bean;/** * @author 动力节点 * @version 1.0 * @className Person * @since 1.0 **/publicclassPerson{}

第二步:编写一个类实现FactoryBean接口

packagecom.powernode.spring6.bean;importorg.springframework.beans.factory.FactoryBean;/** * @author 动力节点 * @version 1.0 * @className PersonFactoryBean * @since 1.0 **/publicclassPersonFactoryBeanimplementsFactoryBean<Person>{@OverridepublicPersongetObject()throwsException{returnnewPerson();}@OverridepublicClass<?>getObjectType(){returnnull;}@OverridepublicbooleanisSingleton(){// true表示单例// false表示原型returntrue;}}

第三步:在Spring配置文件中配置FactoryBean

<beanid="personBean"class="com.powernode.spring6.bean.PersonFactoryBean"/>

测试程序:

@TestpublicvoidtestFactoryBean(){ApplicationContextapplicationContext=newClassPathXmlApplicationContext("spring.xml");PersonpersonBean=applicationContext.getBean("personBean",Person.class);System.out.println(personBean);PersonpersonBean2=applicationContext.getBean("personBean",Person.class);System.out.println(personBean2);}

面试题: BeanFactory和FactoryBean的区别

BeanFactory

Spring IoC容器的顶级对象,BeanFactory被翻译为“Bean工厂”,在Spring的IoC容器中,“Bean工厂”负责创建Bean对象。
BeanFactory是工厂。

FactoryBean

FactoryBean:它是一个Bean,是一个能够辅助Spring实例化其它Bean对象的一个Bean。
在Spring中,Bean可以分为两类:

  • 第一类:普通Bean
  • 第二类:工厂Bean(记住:工厂Bean也是一种Bean,只不过这种Bean比较特殊,它可以辅助Spring实例化其它Bean对象。)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 3:26:23

2000-2024年上市公司“低空经济”概念数据

低空经济&#xff0c;是以各种有人驾驶和无人驾驶航空器的各类低空飞行活动为牵引&#xff0c;辐射带动相关领域融合发展的综合性经济形态。2021年2月&#xff0c;中共中央、 国务院在 《国家综合立体交通网规划纲要》 中首次提出发展低空经济2023年12月&#xff0c;中央经济工…

作者头像 李华
网站建设 2026/4/14 20:53:56

如何为特定应用选型滚珠导轨?

滚珠导轨在工业机械设备中是关键的传动元件&#xff0c;广泛应用于数控机床、自动化设备、精密仪器等领域。固在机械设备中选择适合的滚珠导轨直接决定了设备的性能稳定性与最终品质。面对特定应用场景&#xff0c;如何选择适合的滚珠导轨&#xff0c;是个关键的问题。确定负载…

作者头像 李华
网站建设 2026/4/12 5:50:00

非冯·诺依曼原理与架构计算机深度研究报告

非冯诺依曼原理与架构计算机深度研究报告摘要&#xff1a;冯诺依曼架构自1945年提出以来&#xff0c;以“存储程序、指令与数据同源存储”的核心特征主导了现代计算机发展近百年。然而&#xff0c;随着大数据、人工智能、量子计算等领域的爆发式增长&#xff0c;该架构面临的“…

作者头像 李华
网站建设 2026/4/15 13:20:18

Swagger Core实战指南:构建企业级API文档自动生成系统

Swagger Core实战指南&#xff1a;构建企业级API文档自动生成系统 【免费下载链接】swagger-core Examples and server integrations for generating the Swagger API Specification, which enables easy access to your REST API 项目地址: https://gitcode.com/gh_mirrors/…

作者头像 李华