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

目录

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

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

相关文章

移动硬盘盒:便携与交互的完美结合 PD 充电IC

在数字化时代的浪潮中&#xff0c;数据已成为我们生活中不可或缺的一部分。随着数据的不断增长&#xff0c;人们对于数据存储的需求也在不断增加。传统的存储设备如U盘、光盘等&#xff0c;虽然具有一定的便携性&#xff0c;但在容量和稳定性方面往往难以满足现代人的需求。而移…

若依框架下拉单选框根据js动态加载,如何使select2的下拉搜素功能同时生效(达到select下拉框的样式不变的效果)

直接上代码&#xff0c;不废话 $(select[name"sealType"]).change(function (event) {let value event.target.valuequeeryDeptListBySealType(value)})// 获取科目信息function queeryDeptListBySealType(value){$.ajax({type: "post",url: prefix &quo…

竞赛选题 python+opencv+深度学习实现二维码识别

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; pythonopencv深度学习实现二维码识别 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 该项目较为新颖&…

Mac提示此电脑不能读取您插的磁盘的原因,Mac磁盘无法读取内容怎么处理

为了能在不同设备中快速传输大容量的文件&#xff0c;我们常常会使用到外接磁盘进行文件的传输。但由于各种原因&#xff0c;比如硬件、文件系统格式等问题&#xff0c;Mac电脑插磁盘会出现无法读取的问题。本文会介绍Mac提示此电脑不能读取您插的磁盘的原因&#xff0c;以及Ma…

基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

react项目中如何书写css

一&#xff1a;问题&#xff1a; 在 vue 项目中&#xff0c;我们书写css的方式很简单&#xff0c;就是在 .vue文件中写style标签&#xff0c;然后加上scope属性&#xff0c;就可以隔离当前组件的样式&#xff0c;但是在react中&#xff0c;是没有这个东西的&#xff0c;如果直…

iMac 数据怎么恢复:iMac 数据恢复的 4 个方法

想象一下&#xff0c;当你发现你的重要文件或回忆从你的 iMac 中删除时&#xff0c;那是多么可怕。无论是由于意外删除、硬件问题还是程序问题&#xff0c;恐慌都是真实的。它就像是数字荒野中的生命线。 本指南将为您提供所需的信息和工具&#xff0c;帮助您渡过数据丢失的危…

Steam邮件推送内容有哪些?配置教程详解!

Steam邮件推送功能是否安全&#xff1f;如何个性化邮件推送内容&#xff1f; Steam作为全球最大的数字游戏分发平台之一&#xff0c;不仅提供了海量的游戏资源&#xff0c;还通过邮件推送为用户提供最新的游戏信息、促销活动和个性化推荐。AokSend将详细介绍Steam邮件推送的主…

磁芯电感 晶谷电容可镀银浆用玻璃 晶谷电阻银浆料低温玻璃粉(耐强酸)

晶谷电阻银浆料低温玻璃粉&#xff08;耐强酸&#xff09;软化点在490至580度之间&#xff0c;线膨胀系数为&#xff08;75至95&#xff09;10-7&#xff0c;粒径为1.5至3微米&#xff08;可按要求订做&#xff09;&#xff0c;外观颜色为白色超细粉末&#xff0c;烧后颜色无色…

SAP 预制凭证相关小结(搜集于网络)

SAP 预制凭证相关小结&#xff08;搜集于网络&#xff09; 1. 预制凭证会生成凭证编号 2. 预制凭证不更新科目余额 3. 预制凭证会占FM预算 4. 预制凭证可以随意更改 5. 预制凭证可以删除&#xff0c;删除后只剩下凭证抬头&#xff0c;没有行项目&#xff0c;凭证编号不变 …

量检具管理有一套

量检具是用于测量和检验产品尺寸、形状和质量的工具。有一位年轻的工程师小张&#xff0c;他负责管理工厂的量检具&#xff0c;确保它们能够准确地测量产品尺寸和质量。有一天&#xff0c;小张发现量检具出现了一些问题。他注意到一些量具的读数不准确&#xff0c;导致生产出来…

NSSCTF-Web题目15

目录 [HNCTF 2022 WEEK2]ez_SSTI 1、题目 2、知识点 3、思路 [SWPUCTF 2022 新生赛]Ez_upload 1、题目 2、知识点 3、思路 [HNCTF 2022 WEEK2]ez_SSTI 1、题目 2、知识点 SSTI、Jinja2 参考链接&#xff1a;1. SSTI&#xff08;模板注入&#xff09;漏洞&#xff08;…

AD23关于铺铜后不显示问题

1、全部铺铜快捷键T --> G --> A 2、局部铺铜操作&#xff1a;选中铜皮 --> 右键 --> Y --> O 3、铺铜是有顺序的&#xff0c;比如在内部先铺了一块铜皮&#xff0c;后面又进行整体铺铜&#xff0c;如果使用全部铺铜快捷键&#xff0c;可能会导致之前的铜皮被…

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装&#xff0c;可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 &#xff08;1&#xff09;通过position属性,可以控制下拉选项的位置 &am…

环境安装--JDK

目录 官网下载JDK JDK安装 配置环境变量 验证使用 卸载 官网下载JDK https://www.oracle.com/java/technologies/downloads https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 注意区分&#xff1a; Java SE Development Kit 8…

C++集中营笔记(1)第一节课和第二节课

第一节课linux的使用 1.Linux 常用命令 [chenbogon ~]$ cd ~ [chenbogon ~]$ cd /home [chenbogon home]$ mkdir cpp-test mkdir: cannot create directory ‘cpp-test’: Permission denied [chenbogon home]$ sudo mkdir cpp-testWe trust you have received the usual lec…

群辉NAS使用Kodi影视墙

目录 一、KODI安装 二、修改UI语言 1、修改显示字体 2、修改语言为中文 四、添加媒体库 五、观看电影 五、高级设置 1、视图类型 2、修改点击播动作 五、补充 1、文件组织结构及命名 2、电影信息的刮削 (1)添加影片 (2)演员管理 (3)影片管理 (4)说明 K…

「51媒体」媒体邀约小常识

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传加速季&#xff0c;100万补贴享不停&#xff0c;一手媒体资源&#xff0c;全国100城线下落地执行。详情请联系胡老师。 媒体邀约是组织或企业为了宣传、推广或展示其活动、产品或…

Linux tcpdump抓包必备知识

author: 放牛娃学编程 moto: 分享与热爱&#xff0c;不是大爱我不说 放牛娃每日一语: 除了你自己&#xff0c;没有人可以说你不行 别急着划开&#xff0c;这篇笔记一定能够给你带来收获 因为这里你能学到AI永远也给不了你的知识 Linux tcpdump抓包必备知识 文章目录 Linux tcp…

傅佩荣讲座视频全集百度网盘,傅佩荣讲座视频大全百度云

在当今信息爆炸的时代&#xff0c;获取知识的途径日益多元化&#xff0c;其中&#xff0c;通过网络观看各类教学视频已成为众多学习者的首选。傅佩荣教授的视频课程深受广大学者的喜爱。然而&#xff0c;对于许多初学者来说&#xff0c;如何下载傅佩荣的视频却是一个难题。本文…