考研后SpringBoot复习2—容器底层相关注解

考研后SpringBoot复习2

SpringBoot底层注解学习

与容器功能相关的注解与springboot的底层原理密切相关

组件添加注解@configuration

Spring Ioc容器部分回顾

包括在配置中注册,开启包扫描和注解驱动开发等需要在进行重新的学习回顾

实例

package com.dzu.boot;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;/*** 主程序类* @Author ChenRuXu* @Date 2023/12/30 16:22* @Version 1.0*/
@SpringBootApplication
public class MainApplication {public static void main(String[] args) {ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);//返回所有容器的名字String[] beanDefinitionNames = run.getBeanDefinitionNames();//遍历输出for (String name:beanDefinitionNames){System.out.println(name);}}
}

使用@controller注解和@Configuration 和@Bean注解可以将组价注册到Spring容器中
在这里插入图片描述

proxyBeanMethods:代理bean的方法

  •  Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
    
  •  Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
    
  •  组件依赖必须使用Full模式默认。其他默认是否Lite模式
    
  • 最佳实战
    • 配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
    • 配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式

组件导入注解@Import

//给容器中自动创建这两个类型的组件
@Import({User.class, DBHelper.class})

实例验证@bean与@import导入的不同

package com.dzu.boot;import ch.qos.logback.core.db.DBHelper;
import com.dzu.boot.bean.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;/*** 主程序类* @Author ChenRuXu* @Date 2023/12/30 16:22* @Version 1.0*/
@SpringBootApplication
public class MainApplication {public static void main(String[] args) {ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);//返回所有容器的名字String[] beanDefinitionNames = run.getBeanDefinitionNames();//遍历输出for (String name:beanDefinitionNames){System.out.println(name);}//获取组件String[] beanNamesForType = run.getBeanNamesForType(User.class);System.out.println("==========");for (String s:beanNamesForType){System.out.println(s);}DBHelper bean1 = run.getBean(DBHelper.class);System.out.println(bean1);}
}

全类名为import导入,而方法名相关的为@bean导入Spring容器中的
在这里插入图片描述

条件装配注解@Conditional

条件装配:满足Conditional指定的条件,则进行组件注入

找到@conditional注解之后使用Ctrl+H打开继承树查看其对应的派生注解对应不同的功能(根据不同的条件进行判断

在这里插入图片描述

条件装配实例测试

=====================测试条件装配==========================
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
//@ConditionalOnBean(name = "tom")
@ConditionalOnMissingBean(name = "tom")
public class MyConfig {/*** Full:外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象* @return*/@Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例public User user01(){User zhangsan = new User("zhangsan", 18);//user组件依赖了Pet组件zhangsan.setPet(tomcatPet());return zhangsan;}@Bean("tom22")public Pet tomcatPet(){return new Pet("tomcat");}
}public static void main(String[] args) {//1、返回我们IOC容器ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);//2、查看容器里面的组件String[] names = run.getBeanDefinitionNames();for (String name : names) {System.out.println(name);}boolean tom = run.containsBean("tom");System.out.println("容器中Tom组件:"+tom);boolean user01 = run.containsBean("user01");System.out.println("容器中user01组件:"+user01);boolean tom22 = run.containsBean("tom22");System.out.println("容器中tom22组件:"+tom22);}

原生配置文件引入注解@ImportResource

作用将xml文件导入到Spring容器中

  1. 在resource下面编写xml文件(类似Spring的配置文件)
?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><bean id="haha" class="com.atguigu.boot.bean.User"><property name="name" value="zhangsan"></property><property name="age" value="18"></property></bean><bean id="hehe" class="com.atguigu.boot.bean.Pet"><property name="name" value="tomcat"></property></bean>
</beans>
  1. 通过注解将配置文件中的实例注入到spring容器中
@ImportResource("classpath:beans.xml")
public class MyConfig {}======================测试=================boolean haha = run.containsBean("haha");boolean hehe = run.containsBean("hehe");System.out.println("haha:"+haha);//trueSystem.out.println("hehe:"+hehe);//true

之后复习springboot自动配合相关的原理

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

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

相关文章

FileZilla的安装与使用

文章目录 一、FileZilla简介1.1 FileZilla概述1.2 FileZilla 的优点1.3 FileZilla 的应用场景 二、搭建FileZilla服务器2.1 下载2.2 安装服务端2.3 新建组2.4 新建用户2.5 新建目录2.6 权限分配2.7 安装客户端2.8 FilaZilla远程连接 三、主被动模式 一、FileZilla简介 1.1 Fil…

Windows 10启用Hyper-V

Windows 10启用Hyper-V 官网教程PowerShell 启用 Hyper-V启用 Hyper-V 角色 我们知道VMware是创建虚拟机的好工具&#xff0c;那Windows平台上有没有虚拟工具呢&#xff1f; 今天我们要讲解的就是Windows才入局的虚拟工具&#xff1a;Hyper-V 官网教程 https://learn.microsof…

磁盘和文件系统管理

一&#xff1a;磁盘结构&#xff1a; 1.磁盘基础&#xff1a; 扇区固定大小&#xff0c;每个扇区4k。磁盘会进行磨损&#xff0c;损失生命周期。 设备文件&#xff1a; 一切皆文件 设备文件&#xff1a;关联至一个设备驱动程序&#xff0c;进而能够跟与之对应硬件设备进行通…

【c++————————构造函数和析构函数】

【c————————构造函数和析构函数】 欢迎阅读新一期的c模块————构造函数和析构函数 ✒️个人主页&#xff1a;-Joker- &#x1f3f7;️专栏&#xff1a;C &#x1f4dc;代码仓库&#xff1a;c_code &#x1f339;&#x1f339;欢迎大佬们的阅读和三连关注&#xff0c…

让你的 Python 代码更快的 9 个技巧

在最近参加的一些技术会议上,我常常听到参会员在会中讨论技术选型时提到“Python太慢了”。然而,这种观点往往没有考虑到Python的众多优点。实际上,如果能够遵循Pythonic的编程风格,Python的运行速度可以非常快。这其中的关键在于掌握一些技术细节上的巧妙技巧。那些经验丰…

使用内网穿透轻松实现在外远程访问本地威联通QNAP NAS

文章目录 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 前言 购入威联通NAS后&#xff0c;很多用户对于如何在外在公网环境下的远程访问威联通NAS…

C语言转WebAssembly的全流程,及Web端调用测试

第一步&#xff1a;安装环境 参考网址&#xff1a;https://emscripten.org/docs/getting_started/downloads.html 具体过程&#xff1a; 克隆代码&#xff1a;git clone https://github.com/emscripten-core/emsdk.git进入代码目录&#xff1a;cd emsdk获取最新远端代码&…

Sectigo证书:为什么它是网站安全的黄金标准?

Sectigo&#xff0c;原名Comodo CA&#xff0c;是全球领先的SSL证书颁发机构&#xff0c;有着20年的网络安全和加密经验。作为一家服务于超过150个国家/地区的组织&#xff0c;Sectigo已颁发超过10亿个数字证书。 Sectigo的SSL证书以高性价比著名&#xff0c;其单域名DV型的证书…

【开源】基于Vue+SpringBoot的学生综合素质评价系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生功能2.2 教师功能2.3 教务处功能 三、系统展示四、核心代码4.1 查询我的学科竞赛4.2 保存单个问卷4.3 根据类型查询学生问卷4.4 填写语数外评价4.5 填写品德自评问卷分 五、免责说明 一、摘要 1.1 项目介绍 基于J…

【Spark精讲】一文搞懂Spark钨丝Tungsten

Tungsten 内存管理机制 催生 Tungsten 内存管理优化的原因主要来自两个方面 。 • Java对象占用内存空间大。 相对于 C/C等更加底层的程序语言&#xff0c; Java对象的存储密度相对偏低。 例如&#xff0c;即使最简单的 “abed” 字符串&#xff0c;用Java的UTF-16编码的情况…

HarmonyOS 通过AppStorage定义组件共享数据

我们实现组件间共享数据可以通过 AppStorage 他下面有两个函数可以实现这一功能 SetOrCreate和Set AppStorage.SetOrCreate("dataMap",{name:"小猫猫" }) AppStorage.Set("dataMap",{name:"小猫猫" })Set是 如果键值存在 他会覆盖 但…

2023年终总结丨很苦,很酷!

文章目录 个人简介丨了解博主写在前面丨博主介绍年终总结丨博主成就年终总结丨博主想说年终总结丨学习芝士年终总结丨未来展望写在后面丨新年快乐 个人简介丨了解博主 主页地址&#xff1a;https://blog.csdn.net/m0_68111267 荣誉身份 ⭐2022年度CSDN 社区之星 Top6 ⭐2023年…