SpringBoot SpringBoot 原理篇 1 自动配置 1.7 bean 的加载方式【五】

news2024/10/5 18:28:12

SpringBoot

【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】

SpringBoot 原理篇

文章目录

      • SpringBoot
      • SpringBoot 原理篇
      • 1 自动配置
        • 1.7 bean 的加载方式【五】
          • 1.7.1 register

1 自动配置

1.7 bean 的加载方式【五】

1.7.1 register

之前我们又说了一种加载bean 的方式,使用@Import 注解可以无侵入的将一个普通类变成一个bean 放到容器中进行管理。

现在来说第五种:

这种方式平时开发的时候不常用,但是如果是要做一些框架的话就可能会用到…【啊这】

直接开干,先来一个运行程序

package com.dingjiaxiong.app;

import com.dingjiaxiong.config.SpringConfig33;
import com.dingjiaxiong.config.SpringConfig4;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * ClassName: App5
 * date: 2022/10/24 13:42
 *
 * @author DingJiaxiong
 */

public class App5 {

    public static void main(String[] args) {

        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig4.class);

        String[] names = ctx.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }
        System.out.println("=========================");
        
    }

}

直接运行一下看看

在这里插入图片描述

OK,出来了这些东西无所谓

第五种方式就是在上下文对象已经初始化完毕之后,手工加载bean

ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig4.class);

在这里插入图片描述

不要配置类、也不要配置文件【直接编程干】

【怎么做?】

在这里插入图片描述

package com.dingjiaxiong.app;

import com.dingjiaxiong.bean.Cat;
import com.dingjiaxiong.config.SpringConfig33;
import com.dingjiaxiong.config.SpringConfig4;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * ClassName: App5
 * date: 2022/10/24 13:42
 *
 * @author DingJiaxiong
 */

public class App5 {

    public static void main(String[] args) {

        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig4.class);
        //在上下文对象已经初始化完毕之后,手工加载bean

        ctx.registerBean("tom", Cat.class);
        
        String[] names = ctx.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }
        System.out.println("=========================");

    }

}

现在就手工加载了一个tom

直接运行,看看效果

在这里插入图片描述

没啥毛病,上来了

如果多复制几个, 看看会不会有冲突

在这里插入图片描述

运行结果

在这里插入图片描述

可以看到,出来了, 说明没有冲突

那究竟是哪个留下来了,验证一下,修改一下实体类

package com.dingjiaxiong.bean;

import org.springframework.stereotype.Component;

/**
 * ClassName: Cat
 * date: 2022/10/24 10:33
 *
 * @author DingJiaxiong
 */

//这个注解就代表了<bean> 这个标签
@Component("tom")
public class Cat {
    public Cat(){
    }

    int age;

    public Cat(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "age=" + age +
                '}';
    }
}

再修改一下运行类

package com.dingjiaxiong.app;

import com.dingjiaxiong.bean.Cat;
import com.dingjiaxiong.config.SpringConfig33;
import com.dingjiaxiong.config.SpringConfig4;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * ClassName: App5
 * date: 2022/10/24 13:42
 *
 * @author DingJiaxiong
 */

public class App5 {

    public static void main(String[] args) {

        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig4.class);
        //在上下文对象已经初始化完毕之后,手工加载bean

        ctx.registerBean("tom", Cat.class,0);
        ctx.registerBean("tom", Cat.class,1);
        ctx.registerBean("tom", Cat.class,2);

        String[] names = ctx.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }
        System.out.println("=========================");
        System.out.println(ctx.getBean(Cat.class));

    }

}

直接运行,看看是哪只猫

在这里插入图片描述

OK,效果很明显,最后一个留下来了【就像map,因为key 一样,最终只留了最后那个】

这个很有用,假如说现在系统里面有个bean,现在再来一个,把原来那个覆盖了,这就相当于把现有东西给隐藏掉了,只有新的生效了

即一个新的值替换老的值【这个场景就很多了,不做配置用老的值,但凡我一做,就用我们自己的值】

最后再提一个,如果我们仅仅是想注册进去一个bean,还可更简单

ctx.register(Mouse.class);

直接运行

在这里插入图片描述

并不是全路径

OK, 回顾一下

  • 使用上下文对象在容器初始化完毕后注入bean

在这里插入图片描述

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

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

相关文章

FAIRNESS IN MACHINE LEARNING: A SURVEY 阅读笔记

论文链接 刚读完一篇关于机器学习领域研究公平性的综述&#xff0c;这篇综述想必与其有许多共通之处&#xff0c;重合部分不再整理笔记&#xff0c;可详见上一篇论文的笔记&#xff1a; A Survey on Bias and Fairness in Machine Learning 阅读笔记_Catherine_he_ye的博客 S…

红队隧道加密之MSF流量加密(二)

前言 如今大多数企业的内网都部署了流量审计服务, 用来专门分析流量特征, 比如后门特征和行为特征 若直接使用Metasploit对内网进行横向渗透, 其产生的流量会很容易被内网防护工具检测出来, 因此需对流量进行加密来绕过检测 这里介绍使用OpenSSL对MSF流量进行加密 演示步骤 …

这么高颜值的Kubernetes管理工具Lens,难道还不能C位出道吗

一直使用官方的Kubernetes Dashboard来管理k8s&#xff0c;也算很友好的一款UI工具&#xff0c;但显示的资源不全、查看日志有限、时间久了要重要登陆&#xff0c;所以找了一款外观漂亮&#xff0c;用户体验很好的管理平台Lens。 2 特性与安装 2.1 特性 Lens的优势主要有&…

齐聚绿城 | 锦江都城酒店聚焦中高端酒店投资新方向

提起广西&#xff0c;不少人能想到 “桂林山水甲天下”的桂林&#xff0c;亦或因一碗螺蛳粉闻名全国的柳州。又或荣登《国家地理》的涠洲岛。但在你不知晓的时候&#xff0c;南宁这座城在静静的等你发掘。南宁——南疆安宁&#xff0c;是山环水绕的“绿城”&#xff0c;也是北回…

windows系统cmake生成动态库无lib文件解决方法

作为cmake初学者&#xff0c;在windows系统下使用cmake生成c动态库时出现了下图所示问题&#xff0c;是关于lib文件。找了一圈&#xff0c;也没发现生成有lib文件。 在google上查&#xff0c;才发现windows系统下动态库生成lib文件&#xff0c;还需要添加以下命令&#xff1a; …

java 同步锁synchronized 解决线程共享数据重复操作问题

我们先来写一个买票程序 我们先创建一个包 在包下创建两个类 customException 线程类 负责编写抢票的主要逻辑 参考代码如下 public class customException implements Runnable {private int tickets 100;public void run () {while (tickets > 0){if(tickets > 0) {…

【语音增强】多维谱自适应小波语音信号去噪【含Matlab源码 1972期】

⛄一、自适应小波语音信号去噪 1 引言 语音信号在传输过程中&#xff0c;容易受到环境噪声和其他语音的干扰&#xff0c;降低了语音通信质量&#xff0c;影响了语音处理系统工作。所以&#xff0c;语音的净化处理技术&#xff0c;在现代语音通信和数字音频广播系统中起到愈来愈…

特殊的转义字符—— \b 退格字符 ASCII 08

引入 我们在写 C 语言题目时&#xff0c;经常会碰见这样的输出 11 123 1236 123410如果用循环的话&#xff0c;这个加号是个大问题&#xff0c;如果直接用 printf("%d")&#xff0c;最后会多一个加号&#xff0c;用 printf("%d") 则前面会多一个加号。想…

Qt编写视频监控管理平台(支持海康/大华/宇视/华为/天地伟业/H264/H265等)

一、前言 海康大华等厂家自己的客户端软件&#xff0c;基本上都是支持自家的设备&#xff0c;不支持其他家的摄像机和硬盘录像机&#xff0c;并不是因为技术上做不到&#xff0c;这些大厂要实现支持兼容其他的家的&#xff08;他们家的服务端或者收费的都是支持其他家的&#…

写个rpc调用,试试自己了解多少

什么是rpc rpc即是远程过程调用&#xff0c;简单来说就是调用其他服务的接口像调用自己的本地方法一样&#xff0c;通常我们的调用的时候不需要关心调用过程和底层的通信即可实现调用其他的服务&#xff1b; 大概流程就是服务模块双方都会向注册中心注册自己的服务&#xff0c…

开发工具vim

一、开发工具vim vim的安装&#xff1a;yum install -y vim 指令&#xff1a;vim --version可以查看当前的版本信息&#xff0c;没有弹出信息就是没有安装。 装的vim是没有相关配置文件的&#xff0c;配置文件需要后面自己装。 之前说过&#xff0c;vs2019是集成软件编译…

【畅购商城】购物车模块之修改购物车以及结算

目录 购物车操作&#xff1a;修改 分析 接口 后端实现&#xff1a;更新 前端实现&#xff1a;修改 前端实现&#xff1a;全选 后端实现&#xff1a;删除数据 结算 跳转页面 购物车操作&#xff1a;修改 分析 接口 PUT http://localhost:10010/cart-service/carts 后…

python数学基础——单词统计

这个练习使用的是英文的单词统计&#xff0c;使用split通过单词中间的空格来做区分&#xff0c;在遍历的过程中通过对【字典】类型进行【字典推导式】的处理来计算每个单词出现的频次。但是由于过程中我们通过re的正则表达式来替换掉了很多的符号&#xff0c;并没有替换成空&am…

【网页设计】web前端期末大作业html+css

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Day12--自定义组件-渲染my-search组件的基本结构

1.自定义搜索组件 我的操作&#xff1a; 1》在uni_modules中右键新建uni_modules插件&#xff1a; 2》看看效果图&#xff1a; ************************************************************************************************************** 2.在分类页面的 UI 结构中&…

工作中常用的设计模式--策略模式

一般做业务开发&#xff0c;不太容易有大量使用设计模式的场景。这里总结一下在业务开发中使用较为频繁的设计模式。当然语言为Java&#xff0c;基于Spring框架。 1 策略模式(Strategy Pattern) 一个类的行为或方法&#xff0c;在运行时可以根据条件的不同&#xff0c;有不同的…

verilog练习——基础语法

目录 基础语法 VL1 四选一多路器 VL2 异步复位的串联T触发器 VL3 奇偶校验 VL4 移位运算与乘法 VL5 位拆分与运算 VL6 多功能数据处理器 VL7 求两个数的差值 VL8 使用generate…for语句简化代码 VL9 使用子模块实现三输入数的大小比较 VL10 使用函数实现数据大小端转…

数据结构题目收录(二十五)

1、排序趟数与序列的原始状态无关的排序方法是&#xff08;&#xff09;。 Ⅰ、直接插入排序 Ⅱ、简单选择排序 Ⅲ、冒泡排序 Ⅳ、基数排序 A&#xff1a;Ⅰ、ⅢB&#xff1a;Ⅰ、Ⅱ、ⅣC&#xff1a;Ⅰ、Ⅱ、ⅢD&#xff1a;Ⅰ、Ⅳ 解析 交换类的排序&#xff0c;其趟数和…

GUI编程--PyQt5--QDiaglog

文章目录QDialogQFontDialogQColorDialogQFileDialogQInputDialogQDialog 对话框基类&#xff0c;继承QWidget&#xff1b;用于短期任务&#xff0c;分为模态、非模态 模态&#xff0c;阻塞在当前窗口&#xff1b;分为应用程序级别&窗口级别&#xff08;仅阻塞关联的窗口&…

关于使用鼠标时间mouseMove拖拽元素及元素抖动的解决方案

最近在做一个画布相关的项目时有一个场景是移动画布&#xff0c;最先开始想到的是拖拽事件&#xff0c;但是用户希望元素是实时的变化&#xff0c;所以决定使用mouseMove事件来做。 思路 通过mouseDown事件确定鼠标按下的位置根据mouseMove事件来计算出鼠标相对初始状态的横向…