Spring底层原理之bean的加载方式一 用XML方式声明bean 自定义bean及加载第三方bean 2024详解

news2024/10/7 10:14:40

目录

用XML方式声明bean

首先我们创建一个空的java工程

我们要导入一个spring的依赖

注意在maven工程里瞅一眼

我们创建一个业务层接口

还有四个实现类

我们最初的spingboot生命bean的方式是通过xml声明

我们在resources文件夹下创建一个配置文件

我们书写代码

首先初始化上下文对象

接着拿到bean

打印输出

我们在xml里声明的时候

还可以不要这个id

这样进行配置

这样我们要传一个类加载器的对象进去

打印的是内存地址编号

类的全限定名,加上对象的哈希码(以十六进制表示)。

注意

然而我们要去拿同一个类的不同对象就会有些复杂

获取时指定名称

精准获取

否则会报未指定bean的异常

我们在初始化上下文对象

获取我们在spring的配置文件里定义的所有的bean的信息

打印

​编辑

我们尝试加载第三方bean

我们在配置文件里试试

用我们刚刚提到的方法遍历

拿到了第三方bean

说明bean被成功加载

个人号推广

博客主页

Web后端开发

Web前端开发

数据库开发

项目实战

算法与数据结构

计算机基础

回忆录


用XML方式声明bean

使用 XML 方式声明 Spring Bean 是 Spring 框架的一种传统配置方式。这种方法通过在 XML 文件中定义 bean 及其依赖关系,来组装应用程序的各个组件。以下是详细介绍如何使用 XML 方式声明 bean

首先我们创建一个空的java工程

用maven

现在一点spring的工程没有

我们要导入一个spring的依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.9</version>
</dependency>

注意在maven工程里瞅一眼

我们创建一个业务层接口

package com.bigdata1421.bean.service;

public interface BookService {
    void check();
}
    

还有四个实现类

每个实体类打印输出一行数字

package com.bigdata1421.bean.service.impl;

import com.bigdata1421.bean.service.BookService;

public class BookServiceImpl1 implements BookService {
    @Override
    public void check() {

    }
}

我们最初的spingboot生命bean的方式是通过xml声明

我们在resources文件夹下创建一个配置文件

我们书写代码

<!--        xml方式声明自己开发的bean-->
        <bean id="cat" class="com.bigdata1421.bean.Cat"/>

我们接着创建一个应用

书写我们要执行的代码

我们看看我们能不能拿到bean

首先初始化上下文对象

接着拿到bean

打印输出

package com.bigdata1421.bean.app;

import javafx.application.Application;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App1 {
    public static void main(String[] args) {
        //初始化上下文对象
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext1.xml");
        //拿到bean
        Object cat = ctx.getBean("cat");
        //打印
        System.out.println(cat);
    }
}

我们在xml里声明的时候

还可以不要这个id

这样进行配置

<bean class="com.bigdata1421.bean.Dog"/>

这样我们要传一个类加载器的对象进去

Dog.class 是 Java 语言中的一种特殊语法,表示获取 Dog 类的 Class 对象。Class 对象是 Java 中用于表示类的元数据信息的对象,它包含了类的名称、字段、方法、构造函数等信息。

使用 Dog.class 可以在编码阶段获得对 Dog 类的引用,通常用于反射、泛型、类型检查等场景。例如,在 Spring 框架中,可以使用 Dog.class 来指定需要从应用上下文中获取的 bean 的类型。

package com.bigdata1421.bean.app;

import com.bigdata1421.bean.Dog;
import javafx.application.Application;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App1 {
    public static void main(String[] args) {
        //初始化上下文对象
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext1.xml");
        //拿到dog
        Dog dog = ctx.getBean(Dog.class);
        System.out.println(dog);
    }
}

打印的是内存地址编号

类的全限定名,加上对象的哈希码(以十六进制表示)。

在 Java 中,对象的内存地址并不直接暴露给开发者。Java 提供的 hashCode() 方法生成的哈希码并不能被视为对象在内存中的实际地址。Java 虚拟机 (JVM) 通过垃圾收集机制管理内存,内存地址在运行时可能会变化,因此没有直接的方式获取对象的真实内存地址。

然而,对于调试和分析的目的,有时候我们确实需要类似于内存地址的标识符。System.identityHashCode(Object x) 方法可以用来获取对象的“身份哈希码”,这是一个与对象生命周期相关的整数值,尽管它仍然不是实际的内存地址,但在某些情况下可以被用作对象的唯一标识符。

Java 的设计初衷是让开发者专注于业务逻辑而不是内存管理,因此屏蔽了直接操作内存地址的复杂性。而像 C/C++ 这样的语言则允许更底层的内存操作,但也需要开发者对内存管理有更多的掌控和责任。

注意

然而我们要去拿同一个类的不同对象就会有些复杂

我们需要去指定名称

获取时指定名称

精准获取

否则会报未指定bean的异常

小窍门

我们在初始化上下文对象

配置文件的时候

可以调用里面的方法

获取我们在spring的配置文件里定义的所有的bean的信息

打印

我们现在声明的bean都是自己手写的

我们尝试加载第三方bean

我们在配置文件里试试

<!--        xml方式声明第三方开发的bean-->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"/>

用我们刚刚提到的方法遍历

package com.bigdata1421.bean.app;

import com.bigdata1421.bean.Dog;
import javafx.application.Application;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App1 {
    public static void main(String[] args) {
        //初始化上下文对象
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext1.xml");
        String[] arr = ctx.getBeanDefinitionNames();
        for (String s : arr) {
            System.out.println(s);
        }

    }
}

拿到了第三方bean

说明bean被成功加载

小结

个人号推广

博客主页

多多!-CSDN博客

Web后端开发

https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482

Web前端开发

https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482

数据库开发

https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482

项目实战

https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482

算法与数据结构

https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482

计算机基础

https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482

回忆录

https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482

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

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

相关文章

糖尿病早中期症状常常被人们忽视,从而错过最佳的干预时机。

我们都知道糖尿病有“三多一少”&#xff08;多饮、多尿、多食、体重减少&#xff09;的典型症状。然而&#xff0c;现实中糖尿病的表现并非总是如此清晰。更麻烦的是&#xff0c;糖尿病具有很强的隐匿性&#xff0c;若不做血糖检查&#xff0c;多数人难以察觉自己已患病。 今天…

什么无线麦克风音质最好,领夹无线麦克风最新推荐!

当今社会&#xff0c;直播销售的热潮与个人视频日志的流行趋势正重塑着内容创作领域的面貌&#xff0c;同时这也极大地激发了麦克风市场的活力。特别是无线领夹麦克风&#xff0c;它以轻便的设计理念和高效的录音性能&#xff0c;俘获了众多视频创作者的心。无论是在直播带货中…

算法常见问题

1.c虚函数 虚函数是用来实现多态(polymorphism) 的一种机制。通过使用虚函数&#xff0c;可以在子类中重写父类中定义的方法&#xff0c;并且在运行时动态地确定要调用哪个方法。 在类定义中将一个成员函数声明为虚函数&#xff0c;需要使用 virtual 关键字进行修饰 。 通过指向…

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型&#xff08;LLMs&#xff09;&#xff0c;基本上是经过强化训练的 n-gram 模型&#xff0c;它们在网络规模的语言语料库&#xff08;实际上&#xff0c;可以说是我们文明的知识库&#xff09;上进行了训练&#xff0c;展现出了一种超乎预期的语言行为&#xff0c;引…

基于Springboot + vue 的抗疫物质管理系统的设计与实现

目录 &#x1f4da; 前言 &#x1f4d1;摘要 &#x1f4d1;系统流程 &#x1f4da; 系统架构设计 &#x1f4da; 数据库设计 &#x1f4da; 系统功能的具体实现 &#x1f4ac; 系统登录注册 系统登录 登录界面 用户添加 &#x1f4ac; 抗疫列表展示模块 区域信息管理 …

水泥超低排平台级别

在当今社会&#xff0c;环保已成为各行各业发展的重要指标。水泥行业作为国民经济的基础产业&#xff0c;其环保水平的高低直接关系到整个行业的可持续发展。近年来&#xff0c;朗观视觉水泥超低排平台作为水泥行业环保领域的新宠&#xff0c;受到了广泛关注。那么&#xff0c;…

STL —— 用一棵红黑树同时封装出map和set

文章目录 红黑树源代码RBTree.h 红黑树模板参数的控制红黑树结点当中存储的数据模板参数中仿函数的增加普通迭代器和const迭代器的实现myMap.hmySet.hRBTree.h 红黑树源代码 使用KV模型的红黑树进行封装&#xff0c;同时模拟实现出CSTL库当中的map和set RBTree.h //枚举定义…

网络安全:Web 安全 面试题.(XSS)

网络安全&#xff1a;Web 安全 面试题.&#xff08;XSS&#xff09; 网络安全面试是指在招聘过程中,面试官会针对应聘者的网络安全相关知识和技能进行评估和考察。这种面试通常包括以下几个方面&#xff1a; &#xff08;1&#xff09;基础知识:包括网络基础知识、操作系统知…

axios的基本使用和vue脚手架自带的跨域问题解决

axios的基本使用和vue脚手架自带的跨域问题解决 1. axios 1.1 导入axios npm i axios1.2 创建serve1.js serve1.js const express require(express) const app express()app.use((request,response,next)>{console.log(有人请求服务器1了);console.log(请求来自于,re…

【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 任务管理篇 -- 线程管理 --(二)

&#x1f48c; 所属专栏&#xff1a;【BES2500x系列】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f49…

SSM图书馆管理系统-计算机毕业设计源码07925

摘 要 “鸟欲高飞先振翅&#xff0c;人求上进先读书”&#xff0c;可见读书对我们的重要性&#xff0c;在这个高速发展的社会&#xff0c;人们也越来越意识到读书的重要性&#xff0c;人们需要汲取各个领域的知识&#xff0c;不断的拓展自己的知识水平&#xff0c;图书馆作为一…

华为---OSPF的DR与BDR(六)

9.6 OSPF的DR与BDR 9.6.1 原理概述 在OSPF的广播类型网络和NBMA类型网络中&#xff0c;如果网络中有n台路由器&#xff0c;若任意两台路由器之间都要建立邻接关系&#xff0c;则需要建立n(n-1)/2个邻接关系&#xff0c;即当路由器很多时&#xff0c;则需要建立和维护的邻接关…

MTK7628+MT7612 加PA定频数据

1、硬件型号TR726A5G121-DPA PC9.02.0017。如下所示&#xff1a; 2、WIFI5.8 AC模式 42&#xff08;5120MHz&#xff09;信道&#xff0c;80带宽 3、WIFI5.8 AC模式 38&#xff08;5190MHz&#xff09;信道&#xff0c;40带宽 4、WIFI5.8 AC模式 36&#xff08;5180 MHz&…

【Linux】进程间通信上 (1.5万字详解)

目录 一.进程间通信介绍 1.1进程间通信的目的 1.2初步认识进程间通信 1.3进程间通信的种类 二.匿名管道 2.1何为管道 2.1实现原理 2.3进一步探寻匿名管道 2.4编码实现匿名管道通信 2.5管道读写特点 2.6基于管道的进程池设计 三.命名管道 3.1实现原理 3.2代码实现 四.…

asp.net core反向代理

新建项目 新建空白的asp.net core web项目 安装Yarp.ReverseProxy包版本为2.2.0-preview.1.24266.1 编写代码 namespace YarpStu01;public class Program {public static void Main(string[] args){var builder WebApplication.CreateBuilder(args);builder.Services.AddRev…

再添国家级认证!亚信安全获国家信息安全服务(数据安全类)一级资质

近日&#xff0c;亚信安全荣获由中国信息安全测评中心颁发的《国家信息安全测评信息安全服务资质证书—数据安全类一级》资质。凭借在数据安全领域的专业地位和技术水平&#xff0c;亚信安全成为为数不多的获得国家信息安全服务资质数据安全类一级的网络安全企业&#xff01; 中…

如何用家政服务小程序源码系统 快速搭建家政自己接单的软件?

随着移动互联网的快速发展&#xff0c;线上预约服务已成为家政行业的新趋势。然而&#xff0c;许多家政企业面临着信息不透明、服务质量参差不齐、管理效率低下等问题。家政服务小程序系统&#xff0c;可以帮助商家快速搭建自己的接单软件&#xff0c;提升服务效率&#xff0c;…

网安大咖说·镜鉴(下)| 把握安全新脉搏:企业CSO的领航之道

网安大咖说镜鉴栏目通过对网安大咖说嘉宾访谈内容的深度提炼&#xff0c;撷取群英论道之精髓&#xff0c;汇聚众智谋策之高远&#xff0c;为从业者提供宝贵的经验和启迪。集思广益、博采众长&#xff0c;意在以镜为鉴&#xff0c;观网安之百态&#xff0c;立防范之策略&#xf…

AI界又放大招?长文本新霸主“橙篇”来了

哈喽&#xff0c;大家好&#xff0c;木易巷来啦&#xff01; 在自媒体的江湖里&#xff0c;每个创作者都是一位独行侠&#xff0c;手握键盘&#xff0c;心怀天下。而我&#xff0c;也不例外&#xff0c;有点空闲时间就去寻找那个能让我笑傲江湖的AI神兵&#xff0c;让我可以摆…

DEtection TRansformer (DETR)与YOLO在目标检测方面的比较

1. 概述 计算机视觉中的目标检测是一个复杂而有趣的领域&#xff0c;它涉及到让计算机能够识别图像中的物体&#xff0c;并确定它们的位置。下面是DETR和YOLO这两种目标检测方法简单比较&#xff1a; 1.1 YOLO YOLO是一种非常流行的目标检测算法&#xff0c;它的核心思想是将…