Spring IOC容器Bean对象实例化的三种方式

Spring IOC容器Bean对象实例化

  • 构造器实例化
    • 第一步:设置配置⽂件 spring02.xml
    • 第二步:编写构造器
    • 第三步:获取实例化对象
  • 静态工厂实例化 (了解)
    • 第一步:定义工厂类StaticFactory
    • 第二步:设置配置⽂件 spring02.xml
    • 第三步:创建service
    • 第四步:获取实例化对象
  • 实例工厂实例化(了解)
    • 第一步:定义工厂类InstanceFactory
    • 第二步:设置配置⽂件 spring02.xml
    • 第三步:完善bean对象
    • 第四步:获取实例化对象
  • Spring三种实例化Bean的⽅式⽐较

构造器实例化

通过默认构造器创建 空构造⽅法必须存在 否则创建失败

第一步:设置配置⽂件 spring02.xml

配置文件名字自己取,但是后缀一定是xml

<bean id="唯一标识" class="类路径">
</bean>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--构造器实例化对应Bean对象需要提供空构造--><bean id="typeDao" class="com.svt.dao.TypeDao"></bean>
</beans>

第二步:编写构造器

完善在配置文件内写的class="com.svt.dao.TypeDao"
在com.svt下新建一个dao包,在包内新建一个TypeDao类,在类中写一个测试方法

public void test(){System.out.println("TypeDao test...");}

注意:在这个类中写了一个测试方法默认调用无参构造,如果使用了带参构造器,就一定要显示化地写无参构造,不写会出现无法初始化的错误

Failed to instantiate [com.svt.dao.TypeDao]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.svt.dao.TypeDao.<init>()

在这里插入图片描述

第三步:获取实例化对象

在主方法内编写

//加载配置文件//ApplicationContext extends ListableBeanFactory extends BeanFactory 所以可以直接写以下加载配置文件的语句BeanFactory factory=new ClassPathXmlApplicationContext("spring02.xml");//1. 构造器实例化TypeDao typeDao= (TypeDao) factory.getBean("typeDao");typeDao.test();

结果

在这里插入图片描述

静态工厂实例化 (了解)

1.定义工厂类StaticFactory及对应的静态方法createService
2.配置bean对象对应的工厂类及静态方法(找工厂中写的方法)

    id:需要被实例化的bean对象的idclass:静态工厂类的路径factory-method:静态工厂类中实例化bean对象的静态方法

第一步:定义工厂类StaticFactory

在com.svt下新建一个factory包,在包内新建一个StaticFactory 类,定义对应的静态⽅法,返回实例化对象

package com.svt.factory;import com.svt.service.TypeService;/*** 定义静态工厂类*/
public class StaticFactory {public static TypeService createService(){return new TypeService();}
}

第二步:设置配置⽂件 spring02.xml

<bean id="唯一标识" class="静态工厂类的类路径" factory-method="静态工厂类中的静态方法">
</bean>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--静态工厂实例化1.定义工厂类StaticFactory及对应的静态方法createService2.配置bean对象对应的工厂类及静态方法(找工厂中写的方法)id:需要被实例化的bean对象的idclass:静态工厂类的路径factory-method:静态工厂类中实例化bean对象的静态方法--><bean id="typeService" class="com.svt.factory.StaticFactory" factory-method="createService"></bean>
</beans>

第三步:创建service

在com.svt下新建一个service包,在包内新建一个TypeService类,在类中写一个测试方法

package com.svt.service;public class TypeService {public void test(){System.out.println("TypeService test...");}
}

第四步:获取实例化对象

//ApplicationContext extends ListableBeanFactory extends BeanFactory 所以可以直接写以下加载配置文件的语句BeanFactory factory=new ClassPathXmlApplicationContext("spring02.xml");//2.静态工厂实例化 (了解)TypeService typeService= (TypeService) factory.getBean("typeService");typeService.test();

当我们指定Spring使⽤静态⼯⼚⽅法来创建Bean实例时,Spring将先解析配置⽂件,并根据配置
⽂件指定的信息,通过反射调⽤静态⼯⼚类的静态⼯⼚⽅法,并将该静态⼯⼚⽅法的返回值作为
Bean实例,在这个过程中,Spring不再负责创建Bean实例,Bean实例是由⽤户提供的静态⼯⼚⽅
法提供的。

实例工厂实例化(了解)

1.定义工厂类InstanceFactory及对应的非静态方法createTypeController
2.配置工厂对象instanceFactory
3.配置bean对象对应的工厂对象instanceFactory及工厂方法createTypeController

    factory-bean:工厂对象对应的id属性值

第一步:定义工厂类InstanceFactory

package com.svt.factory;import com.svt.controller.TypeController;/*** 定义实例化工厂*/
public class InstanceFactory {/*** 定义方法,返回实例化对象* @return*/public TypeController createTypeController(){return new TypeController();}
}

第二步:设置配置⽂件 spring02.xml

<bean id="工厂类的唯一标识" class="工厂类的类路径"></bean>
<bean id="Bean对象的唯一标识" factory-bean="工厂类的唯一标识" factory-method="工厂类中的方法"></bean>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--实例化工厂实例化1.定义工厂类InstanceFactory及对应的非静态方法createTypeController2.配置工厂对象instanceFactory3.配置bean对象对应的工厂对象instanceFactory及工厂方法createTypeControllerfactory-bean:工厂对象对应的id属性值-->
<!-- 工厂对象--><bean id="instanceFactory" class="com.svt.factory.InstanceFactory"></bean>
<!-- bean对象--><bean id="typeController" factory-bean="instanceFactory" factory-method="createTypeController"></bean>
</beans>

第三步:完善bean对象

在com.svt下新建一个controller包,在包内新建一个TypeController 类,在类中写一个测试方法

package com.svt.controller;public class TypeController {public void test(){System.out.println("TypeController test...");}
}

第四步:获取实例化对象

//3.实例化工厂实例化 (了解)TypeController typeController= (TypeController) factory.getBean("typeController");typeController.test();

Spring三种实例化Bean的⽅式⽐较

  • ⽅式⼀:通过bean的缺省构造函数创建,当各个bean的业务逻辑相互⽐较独⽴的时候或者和外界
    关联较少的时候可以使⽤。
  • ⽅式⼆:利⽤静态factory⽅法创建,可以统⼀管理各个bean的创建,如各个bean在创建之前需要
    相同的初始化处理,则可⽤这个factory⽅法险进⾏统⼀的处理等等。
  • ⽅式三:利⽤实例化factory⽅法创建,即将factory⽅法也作为了业务bean来控制,1可⽤于集成其
    他框架的bean创建管理⽅法,2能够使bean和factory的⻆⾊互换。

开发中项⽬⼀般使⽤⼀种⽅式实例化bean,项⽬开发基本采⽤第⼀种⽅式,交给Spring托管,使⽤时直接拿来使⽤即可。另外两种了解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/315016.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试高频算法专题:数组的双指针思想及应用(算法村第三关白银挑战)

所谓的双指针其实就是两个变量&#xff0c;不一定真的是指针。 快慢指针&#xff1a;一起向前走对撞指针、相向指针&#xff1a;从两头向中间走背向指针&#xff1a;从中间向两头走 移除值为val的元素 题目描述 27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 给你…

如何使用批量重命名技巧:将文件名称中文翻译成英文

在日常生活和工作中&#xff0c;经常要处理大量的文件&#xff0c;其中很多文件的名称是中文的。有时&#xff0c;要更好地与国际接轨或是满足特定的需求&#xff0c;要将这些中文文件名称翻译成英文。一个一个手动翻译不仅效率低下&#xff0c;而且容易出错。此时&#xff0c;…

如何防勒索病毒

2018年8月3日 台积电被曝出在台湾地区的三大厂区遭病毒入侵&#xff0c;直到8月6日台积电官方才发表声明称已经恢复生产。 2019年3月份 全球最大铝制品生产商之一的Norsk Hydro遭遇勒索软件攻击&#xff0c;公司被迫关闭多条自动化生产线&#xff0c;震荡全球铝制品交易市场。…

从公司代码仓库更新代码出现错误

错误&#xff1a; 解决&#xff1a;点击idea右上角&#xff0c;将远程代码和本地合并

YOLOv7独家原创改进:提出一种新的Shape IoU,更加关注边界框本身的形状和尺度,对小目标检测也很友好 | 2023.12.29收录

💡💡💡本文改进:一种新的Shape IoU方法,该方法可以通过关注边界框本身的形状和尺度来计算损失,解决边界盒的形状和规模等固有属性对边界盒回归的影响。 💡💡💡对小目标检测涨点明显,在VisDrone2019、PASCAL VOC均有涨点 收录YOLOv7原创自研 https://blog.csdn…

不知道怎么使用IDEA,一篇文章带你快速上手

前言 IDEA 是由 JetBrains 公司开发的软件产品&#xff0c;全称为 IntelliJ IDEA&#xff0c;一个 Java 语言的集成开发环境。它 —— 在业界被公认为是最好的 Java 开发工具之一&#xff0c;尤其在智能代码助手、代码自动提示、重构、J2EE 支持、Ant、JUnit、CVS 整合、代码审…

【ModelScope】从入门到进阶

计算机视觉任务 任务&#xff08;Task&#xff09;中文任务&#xff08;Task&#xff09;英文任务说明单标签图像分类image-classification对图像中的不同特征根据类别进行区分通用图像分割image-segmentation识别图像主体与图像背景进行分离文字检测ocr-detection将图像中的文…

MYSQL 深入探索系列六 SQL执行计划

概述 好久不见了&#xff0c;近期一直在忙项目的事&#xff0c;才有时间写博客&#xff0c;近期频繁出现sql问题&#xff0c;今天正好不忙咱们看看千万级别的表到底该如何优化sql。 案例 近期有个小伙伴生产环境收到了告警&#xff0c;有个6千万的日志表&#xff0c;查询耗时大…

nginx 多端口部署多站点

目录 1.进行nginx.conf 2.复制粘贴 3.修改端口及站点根目录 4. 网站上传 1.进行nginx.conf 在 nginx 主要配置文件 nginx.conf 中&#xff0c;server 是负责一个网站配置的&#xff0c;我们想要多个端口访问的话&#xff0c;可以复制多个 server 先进入到 nginx.conf 中 …

编程语言的未来?直观点5年之际!

编程语言的未来&#xff1f;未来5年应该如何发展&#xff01; 随着科技的飞速发展&#xff0c;编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心&#xff0c;为程序员提供了与机器沟通的桥梁。那么&#xff0c;在技术不断进步的未来&#xff0c;编程语言的走…

这些产品手册制作工具,你都值得收藏

产品手册是企业向消费者传达产品信息的重要媒介&#xff0c;它能够直接影响消费者对产品的了解和购买决策。然而&#xff0c;制作一份专业而吸引人的产品手册并非易事&#xff0c;需要一定的设计和排版能力。为了帮助企业和个人更轻松地制作出优质的产品手册&#xff0c;下面将…

【稳定性】浅谈11.11大促之预案演练 | 京东物流技术团队

一、预案演练 预案演练主要解决的问题是&#xff1a;根据单个系统的应急预案&#xff0c;模拟应用系统的一种或多种故障场景&#xff0c;验证系统的可靠性。 1.1、预案演练形式 预案演练根据应急预案组织相关的应急组织机构和人员&#xff0c;针对事先假设的异常应急场景&am…