Spring 的 Ioc配置

HappyComponent.java

package com.atguigu.Ioc_01;public class HappyComponent {// 默认包含无参的构造方法public void dowork(){System.out.println("HappyComponent.dowork");}
}

ClientService.java

package com.atguigu.Ioc_01;静态工厂类
public class ClientService {private static ClientService clientService = new ClientService();private ClientService() {}public static ClientService clientService() {return clientService;}
}

ClientServiceImpl.java

package com.atguigu.Ioc_01;public class ClientServiceImpl {
}

DefaultServiceLocator.java

package com.atguigu.Ioc_01;非静态工厂类
public class DefaultServiceLocator {public static ClientServiceImpl clientService = new ClientServiceImpl();public ClientServiceImpl createClientServiceInstance() {return clientService;}
}

resources目录下的 .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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">1、可以使用无参构造函数实例化的组件,如何进行Ioc配置呢?<bean - 一个组件信息(一个组件对象)id:组件的标识,唯一class:组件的类的权限定符配置了两个组件happyComponent1 和 happyComponent2,它们的类型都是com.atguigu.Ioc_01.HappyComponent,Spring容器会使用无参构造函数来创建这两个组件的实例,并将它们存储在IoC容器中,因为,默认是单例模式(singleton),即使声明了两次,Spring容器也只会创建一个HappyComponent的实例,但会为这两个bean引用提供相同的实例。当你从容器中获取这两个bean的引用时:HappyComponent happyComponent1 = context.getBean("happyComponent1", HappyComponent.class);HappyComponent happyComponent2 = context.getBean("happyComponent2", HappyComponent.class);happyComponent1、happyComponent2这两个引用实际上是指向同一个HappyComponent对象的,即它们的地址(内存中的引用)是相同的,这就是单例作用域的含义。<bean id="happyComponent1" class="com.atguigu.Ioc_01.HappyComponent" /><bean id="happyComponent2" class="com.atguigu.Ioc_01.HappyComponent" />2、静态工厂类,如何声明工厂方法进行Ioc配置?id = "组件的标识"class ="工厂类的权限定符"factory-method = "静态工厂方法"下面这个bean,意思是:调用“com.atguigu.Ioc_01.ClientService”这个工厂类的“clientService”方法,将它造出的组件对象,存储到Ioc容器,叫clientService(id等于的那个值)配置了一个名为clientService的组件,它并不直接通过类的构造函数来实例化,而是,通过调用com.atguigu.Ioc_01.ClientService类的静态方法clientService来创建实例,factory-method属性用于指定用于创建组件实例的静态工厂方法。<bean id="clientService" class="com.atguigu.Ioc_01.ClientService" factory-method="clientService" />3、非静态工厂,如何声明Ioc配置?配置了一个非静态工厂defaultServiceLocator,它本身也是一个bean,由Spring容器管理,然后,通过factory-bean属性指定了非静态工厂bean的id,并且,通过factory-method属性指定了用于创建组件实例的非静态工厂方法createClientServiceInstance,所以,Spring容器会首先创建defaultServiceLocator的实例,然后调用其createClientServiceInstance方法来创建clientService2组件的实例步骤1、配置工厂类的组件信息<bean id="defaultServiceLocator" class="com.atguigu.Ioc_01.DefaultServiceLocator" />步骤2、通过指定非静态工厂对象和方法名,来配置生成Ioc信息也就是:根据工厂对象的实例工厂方法,进行实例化组件对象。<bean id="clientService2" factory-bean="defaultServiceLocator" factory-method="createClientServiceInstance" /></beans>

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

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

相关文章

BIM自动化简介

毫无疑问&#xff0c;BIM 方法已成功提高和提高了建筑行业流程的效率。 世界各地的各种私人机构和公共实体都认识到这一点&#xff0c;他们决定在几年内实施这种项目设计、管理和施工方法&#xff0c;最大限度地减少执行时间和经济成本。 建筑流程融入数字和技术时代&#xff…

解决Spring boot添加了actuator导致StreamBridge未自动加载的bug

案情说明 在Spring boot项目中&#xff0c;如果同时依赖了spring-cloud-starter-stream-rabbit和spring-boot-start-actuator两个包&#xff0c;启动时可能会出现StreamBridge组件找不到的问题。如下&#xff1a; *************************** APPLICATION FAILED TO START **…

Unity WebRequest 变得简单

作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。 (谢谢你的关注…

Python学习:lambda(匿名函数)、装饰器、数据结构

Python Lambda匿名函数 Lambda函数&#xff08;或称为匿名函数&#xff09;是Python中的一种特殊函数&#xff0c;它可以用一行代码来创建简单的函数。Lambda函数通常用于需要一个函数作为输入的函数&#xff08;比如map()&#xff0c;filter()&#xff0c;sort()等&#xff0…

C++ 多线程和互斥锁(一文搞定)

实验 简介&#xff1a;我们启动并行启动两个线程&#xff0c;但设置一个全局互斥锁&#xff0c;在两个线程中等待并占用互斥锁&#xff0c;然后输出日志。 代码 #include <iostream> #include <thread> /* C 多线程库 */ #include <mutex> …

基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)

基于Hive的天气情况大数据分析系统&#xff08;通过hive进行大数据分析将分析的数据通过sqoop导入到mysql&#xff0c;通过Django基于mysql的数据做可视化&#xff09; Hive介绍&#xff1a; Hive是建立在Hadoop之上的数据仓库基础架构&#xff0c;它提供了类似于SQL的语言&…

设计模式之基于接口而非实现的设计原则

概念 基于接口而非实现的设计原则是一种重要的软件设计原则&#xff0c;它强调在设计和开发软件时&#xff0c;应该更多地关注接口而非具体的实现细节。这一原则有助于实现软件的可扩展性、可维护性和灵活性。 首先&#xff0c;基于接口的设计原则有助于实现软件的可扩展性。…

Axios和Ajax俩者的区别

Axios 和 Ajax 都是用于发起 HTTP 请求的工具&#xff0c;但它们之间有一些重要的区别&#xff1a; Ajax&#xff1a; Ajax 是一种使用 JavaScript 发起异步 HTTP 请求的技术&#xff0c;通常通过 XMLHttpRequest 对象来实现。在使用 Ajax 时&#xff0c;需要手动处理请求和响应…

2015年认证杯SPSSPRO杯数学建模A题(第二阶段)绳结全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 A题 绳结 原题再现&#xff1a; 给绳索打结是人们在日常生活中常用的技能。对登山、航海、垂钓、野外生存等专门用途&#xff0c;结绳更是必不可少的技能之一。针对不同用途&#xff0c;有多种绳结的编制方法。最简单的绳结&#xff0c;有时称…

机器学习和深度学习的简单对比

如图1-2所示&#xff0c;深度学习&#xff08;DeepLearning&#xff0c;DL&#xff09;属于机器学习的子类。它的灵感来源于人类大脑的工作方式&#xff0c;这是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络本身并非是一个全新的概念&#xff0c;可理解为包含多…

实战 | 微调训练TrOCR识别弯曲文本

导 读 本文主要介绍如何通过微调训练TrOCR实现弯曲文本识别。 背景介绍 TrOCR&#xff08;基于 Transformer 的光学字符识别&#xff09;模型是性能最佳的 OCR 模型之一。在我们之前的文章中&#xff0c;我们分析了它们在单行打印和手写文本上的表现。 TrOCR—基于Transforme…

系统分析师-数学与经济管理

系统架构设计师 系统架构设计师-软件开发模型总结 文章目录 系统架构设计师前言一、最小生成树二、最短路径三、网络与最大流量四、不确定型决策 前言 数学是一种严谨、缜密的科学&#xff0c;学习应用数学知识&#xff0c;可以培养系统架构设计师的抽象思维能力和逻辑推理能…

go中函数与方法的区别与go中关于面向对象理解

声明方法的区别 函数是一段可以独立调用的代码块&#xff0c;它可以有参数和返回值。函数的声明不依赖于任何类型&#xff0c;可以直接通过函数名进行调用。 函数的声明格式如下&#xff1a; func functionName(parameters) returnType {// 函数体 }示例&#xff1a; func A…

【Python】python+requests+excel+unittest+ddt实现接口自动化实例

目录 测试需求实现思路框架代码实例1. 环境准备和配置文件2. Excel接口数据及测试结果3. API封装4. 读取Excel数据5. 测试用例6. 日志和配置文件处理7. HTMLTestRunner生成可视化的html报告8. 报告通过飞书/邮件发送报告通过飞书发送报告通过邮件发送9. 入口函数10. 飞书Webhoo…

Git 命令总览

Git Git 是一个版本控制系统&#xff0c;用于管理项目代码。通过 Git 可以轻松地进行代码的提交、更新和合并&#xff0c;确保项目代码的安全性和稳定性。同时&#xff0c;Git 还提供了丰富的工具和功能&#xff0c;如分支管理、代码审查、版本回退等&#xff0c;帮助开发更好…

(含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现

原生写法 // 封装组件 import React, { useState, useRef } from react;const DraggableModal ({ children }) > {const [position, setPosition] useState({ x: 0, y: 0 });const modalRef useRef(null);const handleMouseDown (e) > {const modal modalRef.curre…

五种免费的Python开发环境及具体下载网址

五种免费的Python开发环境及具体下载网址 目录 五种免费的Python开发环境及具体下载网址1.Anaconda2.PyCharm Community Edition3.Visual Studio Code4.Jupyter Notebook5. WinPython Python编程可选择不同的开发工具环境进行&#xff0c;本文介绍五种常用的&#xff0c;读者可…

adb基本命令

下载安装 adb 概述: ADB 全称为 Android Debug Bridge&#xff0c;起到调试桥的作用&#xff0c;是一个客户端-服务器端程序。其中客户端是用来操作的电脑&#xff0c;服务端是 Android 设备。 下载地址: Windows版本&#xff1a;https://dl.google.com/android/repository/pl…

vue前端工程化

前言 本文介绍的是有关于vue方面的前端工程化实践&#xff0c;主要通过实践操作让开发人员更好的理解整个前端工程化的流程。 本文通过开发准备阶段、开发阶段和开发完成三个阶段开介绍vue前端工程化的整体过程。 准备阶段 准备阶段我将其分为&#xff1a;框架选择、规范制…

vue做移动端自适应插件实现rem

1.实现方式 postcss-pxtorem&#xff1a;将px转换为rem amfe-flexible&#xff1a;为html、body提那家font-size&#xff0c;窗口调整的时候重新设置font-size 2.安装与使用 npm install amfe-flexible --save npm install postcss-pxtorem --save-dev 1.再main.js入口文件…