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.mfbz.cn/a/498819.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springcloud基本使用(搭建eureka服务端)

创建springbootmaven项目 next next finish创建成功 删除项目下所有文件目录,只保留pox.xml文件 父项目中的依赖: springboot依赖: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-s

HTTP,Servlet

HTTP 概念&#xff1a;HyperTextTransferProtocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 HTTP协议特点&#xff1a; 1.基于TCP协议&#xff1a;面向连接&#xff0c;安全 2.基于请求-响应模型的&#xff1a;一次请求对应一次响应 …

day69实现MyBatis 的Mapper接口 封装SqlSession对象 mapper接口形参怎么给占位符赋值

一 创建项目的准备工作 1 添加jar包 MySql.jar .MyBatis.jar 2 在src中配置MyBatis.xml文件 二 封装SqlSession对象 1 SqlSessionFactoryBuilder 生命周期 这个类可以被实例化,使用和丢弃。一旦你创建了 SqlSessionFactory 后…

CY3.5-COOH热稳定性Cyanine3.5-COOH星戈瑞

CY3.5-COOH的热稳定性是评估其性能和应用的指标之一。在实际应用中&#xff0c;特别是在高温环境下&#xff0c;热稳定性决定了染料能否保持其原有的物理化学性质&#xff0c;从而确保实验结果的准确性和可靠性。 研究表明&#xff0c;CY3.5-COOH花菁染料羧基科研试剂具有较高…

“直播曝光“有哪些媒体直播分流资源?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 我们线下举办活动时&#xff0c;往往希望活动进行更大的曝光&#xff0c;随着视频直播越来越被大众认可&#xff0c;甚至成了活动的标配&#xff0c;那么做活动视频直播的时候&#xff0…

魔众众包系统——革命性的在线任务接单平台

魔众众包系统&#xff0c;一个革命性的在线任务接单平台&#xff0c;最新版本为v1.9.0&#xff0c;发布日期为2024年3月10日。这个平台不仅提供了一个高效的任务分配和管理环境&#xff0c;还通过其先进的技术架构&#xff0c;确保了系统的稳定性和可靠性。无论是对于企业还是个…

【计算机网络】第 9 问:四种信道划分介质访问控制?

目录 正文什么是信道划分介质访问控制&#xff1f;什么是多路复用技术&#xff1f;四种信道划分介质访问控制1. 频分多路复用 FDM2. 时分多路复用 TDM3. 波分多路复用 WDM4. 码分多路复用 CDM 正文 什么是信道划分介质访问控制&#xff1f; 信道划分介质访问控制&#xff08;…

数据库索引及优化

数据库索引及优化 什么是索引&#xff1f; MySQL官方对索引的定义为&#xff1a;索引&#xff08;INDEX&#xff09;是帮助MySQL高效获取数据的数据结构。 索引的本质&#xff1a; 数据结构 为什么要引入索引&#xff1f; 引入索引的目的在于提高查询效率&#xff0c;就好像是…

数据库中的约束纯干货——主键约束

目录 &#xff08;一&#xff09;特点&#xff1a; &#xff08;二&#xff09;添加主键约束 2.1格式&#xff1a; 2.2举例&#xff1a; 2.3建立表级约束&#xff1a; 2.4建立表后增加主键约束 &#xff08;三&#xff09;复合主键 3.1格式&#xff1a; 3.2举例&#…

混压板如何计算走线损耗?

在电子电路设计中&#xff0c;混压板是一种极为常见的电路板类型&#xff0c;集成了不同电压等级的电路&#xff0c;然而在走线过程中存在一定的损耗&#xff0c;这些损耗处理不当会直接影响到电路的性能和稳定性&#xff0c;本文将介绍如何计算混压板的走线损耗。 1、走线损耗…

Retelling|Facebook2

录音 Facebook 2 Retelling|Facebook2 复述转写 Hi, Im Helen Campbell, from DJ interpretation, European Commission, Im going to talk about Facebook. You Im sure that you are more familiar with Facebook, a lot, a lot more familiar than I than me. But Ive read…

马耳他公司注册

2004年5月1日&#xff0c;马耳他正式加入欧盟&#xff0c;当地的居民完全享受欧盟居民的待遇&#xff0c;所有的申根国家通行免签证&#xff0c;自由往来&#xff1b;2008年1月1日&#xff0c;马耳他开始使用欧元&#xff0c;正式加入欧盟经济商圈。良好的居住环境、优越的地理…

docker部署ubuntu

仓库&#xff1a; https://hub.docker.com/search?qUbuntu 拉一个Ubuntu镜像 docker pull ubuntu:18.04 查看本地镜像&#xff1a; docker images 运行容器 docker run -itd --name ubuntu-18-001 ubuntu:18.04 通过ps命令可以查看正在运行的容器信息 docker ps 进入容器 最…

FSV13罗德与施瓦茨FSV13频谱分析仪

181/2461/8938产品概述&#xff1a; 罗德与施瓦茨 FSV13 是一款速度极快且多功能的信号和频谱分析仪&#xff0c;适用于从事射频系统开发、生产、安装和维修工作的注重性能、注重成本的用户。 在开发应用中&#xff0c;罗德与施瓦茨 FSV13 凭借其出色的射频特性、同类产品中无…

三数之和【双指针】

1.先来看前面的三道双指针题目 发现&#xff1a;都是一个类型&#xff01; 2.照葫芦画瓢 递增排序固定⼀个数X在这个数后面的区间&#xff0c;找到两个数的和是X的相反数 去重 代码 #include <vector> class Solution { public:vector<vector<int>> threeS…

欧拉-马斯切罗尼常数

一、说明 知道欧拉常数是什么吗&#xff1f;知道啥是调和级数吗&#xff1f;这里给出欧拉常数的来龙去脉&#xff0c;和调和级数以及ln(n)的关系。 欧拉-马斯刻若尼常数: Euler-Mascheroni Constant 二、起源 欧拉-马斯刻若尼常数是一个数学常数&#xff0c;该常数最先由瑞士数…

网络七层模型之数据链路层:理解网络通信的架构(二)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

基于Java二手交易系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

【Canvas与艺术】硬朗风格十二棱表表盘

【效果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>硬朗风格十二棱表表盘</title><style type"text/css…

每日汇评:黄金在2024年第一季度创下历史新高,接下来会发生什么?

周四&#xff0c;金价创下2236美元的历史新高&#xff0c;为2024年第一季度画上了圆满的句号&#xff1b; 在美债收益率低迷、美国经济强劲的背景下&#xff0c;金价没有受到美元走强的影响&#xff1b; 在复活节期间&#xff0c;金价有望达到2251美元&#xff1b; 黄金价格位于…