笔试总结01

1、spring原理

1、spring原理
spring的最大作用ioc/di,将类与类的依赖关系写在配置文件中,程序在运行时根据配置文件动态加载依赖的类,降低的类与类之间的藕合度。它的原理是在applicationContext.xml加入bean标记,在bean标记中通过class属性说明具体类名、通过property标签说明该类的属性名、通过constructor-args说明构造子的参数。其一切都是反射,当通过applicationContext.getBean(“id名称”)得到一个类实例时,就是以bean标签的类名、属性名、构造子的参数为准,通过反射实例对象,唤起对象的set方法设置属性值、通过构造子的newInstance实例化得到对象。正因为spring一切都是反射,反射比直接调用的处理速度慢,所以这也是spring的一个问题。
spring第二大作用就是aop,其机理来自于代理模式,代理模式有三个角色分别是通用接口、代理、真实对象。代理、真实对象实现的是同一接口,将真实对象作为代理的一个属性,向客户端公开的是代理,当客户端调用代理的方法时,代理找到真实对象,调用真实对象方法,在调用之前之后提供相关的服务,如事务、安全、日志。其名词分别是代理、真实对象、装备、关切点、连接点。
2、动态代理:不用写代理类,虚拟机根据真实对象实现的接口产生一个类,通过类实例化一个动态代理,在实例化动态代理时将真实对象及装备注入到动态代理中,向客户端公开的是动态代理,当客户端调用动态代理方法时,动态代理根据类的反射得到真实对象的Method,调用装备的invoke方法,将动态代理、Method、方法参数传与装备的invoke方法,invoke方法在唤起method方法前或后做一些处理。
1、产生动态代理的类:
java.lang.refect.Proxy
2、装备必须实现InvocationHandler接口实现invoke方法
3、反射
通过类说明可以得到类的父类、实现的接口、内部类、构造函数、方法、属性并可以根据构造器实例化一个对象,唤起一个方法,取属性值,改属性值。
如何得到一个类说明?
Class cls=类.class;
Class cls=对象.getClass();
Class.forName(“类路径”);
如何得到一个方法并唤起它?
Class cls=类.class;
Constructor cons=cls.getConstructor(new Class[]{String.class});
Object obj=cons.newInstance(new Object[]{“aaa”});
Method method=cls.getMethod(“方法名”,new Class[]{String.class,Integer.class});
method.invoke(obj,new Object[]{“aa”,new Integer(1)});
4、spring的三种注入方式是什么?
setter
interface
constructor
5、spring的核心接口及核类配置文件是什么?
FactoryBean:工厂bean主要实现ioc/di
ApplicationContext ac=new FileXmlApplicationContext(“applicationContext.xml”);
Object obj=ac.getBean(“id值”);
applicationContext.xml

2、springboot核心注解

@SpringBootConfiguration
该注解表示该应用是一个Springboot应用,最核心的注解。
看过底层源码的都知道实际@SpringBootApplication是@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解合体。
@EnableDiscoveryClient@RefreshScope@EnableCustomConfig@EnableRyFeignClients@SpringBootApplication(exclude = {GsonAutoConfiguration.class})@EnableConfigurationProperties@EnableAsyncpublic class MerchantServiceApplication {	public static void main(String[] args) {  	SpringApplication.run(MerchantServiceApplication.class, args);  }}
@EnableAutoConfiguration
使用该注解注后,Spring Boot 可以根据当前类路径下的包或者类来配置 Spring Bean。
该注解源码:
package org.springframework.boot.autoconfigure;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import org.springframework.context.annotation.Import;@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import({AutoConfigurationImportSelector.class})public @interface EnableAutoConfiguration {    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";    Class<?>[] exclude() default {};    String[] excludeName() default {};}
@EnableConfigurationProperties
如果你用了@EnableConfigurationProperties 和 @Configuration 时,那么所有使用了@ConfigurationProperties注解的beans都会自动被Environment配置。
使用示例:
@Configuration@EnableConfigurationProperties({ UnionpayQrCodeProperties.class,})@AutoConfigureOrderpublic class UnionpayQrCodeConfiguration { @Value("${spring.application.name}") private String applicationName;}
@AutoConfigureAfter
用在自动配置类上面,表示该自动配置类需要在另外指定的自动配置类配置完之后。
如 Mybatis 的自动配置类,需要在数据源自动配置类之后。
使用示例:
@AutoConfigureAfter(DataSourceAutoConfiguration.class)public class MybatisAutoConfiguration {}
@AutoConfigureBefore
用在自动配置类上面,表示该自动配置类需要在另外指定的自动配置类配置之前。
@AutoConfigureOrder
该注解用来确定配置加载的优先级顺序。
@SpringBootConfiguration
该注解其实就是@Configuration 注解的升级版,就只是标识是Springboot中的注解而已。
@ConditionalOnJndi
如果指定的 JNDI 存在时该注解才会生效。
@ConditionalOnMissingClass
使用该注解后,当classpath中没有指定的 Class才生效。
@ConditionalOnWebApplication
如果项目是一个 WEB 项目,使用该注解才会生效。
@ConditionalOnNotWebApplication
如果项目不是一个 WEB 项目,使用该注解才会生效。
@ConditionalOnCloudPlatform
如果指定的云平台激活时,此时该注解才会生效。
@ConditionalOnBean
@ConditionalOnBean(Product.class),只有Product.class 在Spring的ApplicationContext(上下文)中存在时,才能创建该bean。
@ConditionalOnMissingBean
@ConditionalOnMissingBean(Product.class),只有Product.class 在Spring的ApplicationContext(上下文)中不存在时,才能创建该bean。
@ConditionalOnClass
使用该注解后,当类存在于classpath上时,才会创建Bean。
@ConditionalOnProperty
使用该注解时,需指定其属性该注解才会生效。
该注解和其属性使用示例:
@ConditionalOnProperty(value = "rocketmq.producer.enabled", havingValue = "true", matchIfMissing = true)
其中name用来从application.properties中读取某个属性值,如果该值为空,则返回false;如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。如果返回值为false,则该configuration不生效;为true则生效。
@ConditionalOnExpression
如果SpEL 表达式值为 true 时该注解才生效。
该注解使用示例:
@ConditionalOnExpression("${enabled:false}")
@ConditionalOnJava
如果你当前运行的 Java JVM 版本,在设定的版本内该注解才生效。
@ConditionalOnResource
如果类路径下有指定的资源使用该注解才生效。
该注解使用示例;
@ConditionalOnResource(resources="classpath:shiro.ini")
@ConditionalOnSingleCandidate
如果指定的 class 在Spring中就一个 Bean,或为首选bean时,该注解才会生效。
@ConfigurationProperties
使用该注解可以把自定义的properties文件映射到实体bean中。
使用示例:
@Data@Configuration@ConfigurationProperties(prefix = "test.qrcode")public class UnionpayQrCodeProperties {    private Integer merchantId;    private String instMid;    private String mid;    private String tid;    private String notifyUrl;    private String returnUrl;    private String appId;    private String appKey;    private String sourceCode;    private String payUrl;    private String queryUrl;    private String refundUrl;    private String refundQueryUrl;    private String closeUrl;}
4 Spring中6大核心注解
因为SpringBoot主要就是整合Spring全家桶框架的,这里也聊一聊SpringBoot和Spring最紧密的6个注解。
@ComponentScan
这个注解大家应该很熟悉了吧,最常用的注解之一。@ComponentScan注解默认会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。
注意:@SpringBootApplication注解已经包含了@ComponentScan注解。因此Springboot中不需要再单独使用@ComponentScan注解。
使用示例:
@ComponentScan(value = "com.sllt.qyg.test.mapper")public class MyApiApplication { public static void main(String[] args) { 	SpringApplication.run(MyApplication.class, args); }}
@Conditional
Spring4才支持该注解,该注解主要功能是根据设置的条件来装载不同的bean,因此该注解又称为条件注解。
使用该注解后首先把装载的bean对应的类实现Condition接口,再对该接口实现类设置是否装载,最后才是设置条件注解
SpringBoot中以@Conditional*开头的注解,都是已经集成了@Conditional注解相应功能的。
@Component
@Component是一个元注解,即可以注解其他类注解。
比如@Controller、@Service、@Repository等注解就使用该注解。
源码示例:
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Service {    @AliasFor(        annotation = Component.class    )    String value() default "";}
@ImportResource
通过导入的方式实现把实例加入springIOC容器中,使用该注解后导入的是配置文件。
使用示例:
@ImportResource("classpath:spring-redis.xml") //导入xml配置public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); }}
@Import
通过导入的方式实现把实例加入springIOC容器中。
使用示例:
//定义两个类public class A {}public class B {}//导入类@Import({A.class,B.class})@Configurationpublic class TestConfig{}
@Configuration
该注解仅持支Spring3.0+,它用来定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

3、springboot执行流程

4、Spring 类加载过程?🐦

5、单例模式

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

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

相关文章

Mamba 基础讲解【SSM,LSSL,S4,S5,Mamba】

文章目录 Mamba的提出动机TransformerRNN Mama的提出背景状态空间模型 (The State Space Model, SSM)线性状态空间层 (Linear State-Space Layer, LSSL)结构化序列空间模型 &#xff08;Structured State Spaces for Sequences, S4&#xff09; Mamba的介绍Mamba的特性一&#…

天软高频因字库——委托订单因子及资金流向因子发布

天软始终致力于构建完善而丰富的因子库服务体系&#xff0c;陆续推出了股票因子、基金因子、指数因子等众多因子数据及评价数据。 本月天软推出高频委托订单&资金流向相关因子&#xff0c;继续补充和完善天软高频特色因子库&#xff0c;至此该因子库已包含36个因子表单&…

基于SpringBoot+Vue共享客栈管理系统(源码+部署说明+演示视频+源码介绍+lw)

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

Pycharm配置conda

1.下载conda Free Download | Anaconda . 2.配置环境 1.conda自带base环境 2.创建环境 3. Pycharm创建项目&#xff0c;选择环境 3.Pycharm中新建conda环境

win11 安装SIBR 3dgs

1.安装显卡驱动 下载地址&#xff1a; 官方驱动 | NVIDIA下载适用于 GeForce、TITAN、NVIDIA RTX、数据中心、GRID 等 NVIDIA 产品的新驱动。https://www.nvidia.cn/Download/index.aspx?langcn 2.安装cuda 下载地址&#xff1a;如果无法打开&#xff0c;切换.com为.cn&am…

AD20如何整体修改元器件标号?

1 2这里可以设置元器件标号方向 3更新 4点击前两个选项&#xff08;生成&#xff0c;执行&#xff09;即可

【Linux】nmcli命令详解

目录 ​编辑 一、概述 二、常用参数使用 2.1 nmcli networking 1.显示NM是否接管网络 2.查看网络连接状态 3.开/关网络连接 2.2 general ​编辑 1.显示系统网络状态 2.显示主机名 3.更改主机名 2.3 nmcli connection ​编辑1.显示所有网络连接 2.显示某个网卡的…

Day08 Java复习8 Spring MVC概念

Day09 Java复习9 Spring MVC spring mvc 的核心组件是什么&#xff1f; DispatcherServlet 1.JAVA 和Spring 、Spring Boot 、Spring MVC的关系 你要举办一个生日派对&#xff0c;而且你希望它既特别又好玩。Java就像是举办派对的地方&#xff0c;Spring、Spring Boot和Spri…

YOLOv5全网独家改进: 注意力机制改进 | 维度感知选择性集成模块DASI,红外小目标暴力涨点| 2024年3月最新成果

💡💡💡本文独家改进:维度感知选择性集成模块DASI,解决目标的大小微小以及红外图像中通常具有复杂的背景的问题点,2024年3月最新成果 💡💡💡红外小目标实现暴力涨点,只有几个像素的小目标识别率大幅度提升 改进结构图如下: 收录 YOLOv5原创自研 https://…

【正点原子Linux连载】第十九章 设备树下的platform驱动编写 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1&#xff09;实验平台&#xff1a;正点原子ATK-DLRK3568开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id731866264428 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第十九…

PSO-CNN-BiLSTM多输入回归预测|粒子群优化算法-卷积-双向长短期神经网络回归预测|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

软件设计不是CRUD(15):低耦合模块设计理论——行为抽象与设计模式(中)

接上文《软件设计不是CRUD(14):低耦合模块设计理论——行为抽象与设计模式(上)》 3.2、行为抽象中常见的控制逻辑形式 上文我们讨论了在功能的整个控制逻辑中,针对一个业务控制点上的控制方式,可以通过何种行为抽象的方式找到对应的设计模式并最终将需求转换为具有较强…

vue基础——java程序员版(总集)

前言&#xff1a; ​ 这是一个java程序员的vue学习记录。 ​ vue是前端的主流框架&#xff0c;按照如今的就业形式作为后端开发的java程序员也是要有所了解的&#xff0c;下面是本人的vue学习记录&#xff0c;包括vue2的基本使用以及引入element-ui&#xff0c;使用的开发工具…

爬楼梯C语言

方法一&#xff1a;动态规划 int climbStairs(int n) {int f[100] {0};f[0] 0;f[1] 1;f[2] 2;for(int i 3;i<n;i)f[i] f[i-1] f[i-2];//可能是从i-1阶爬上第i阶&#xff0c;也有可能是从i-2阶 return f[n]; } 方法二&#xff1a;滚动数组 int climbStairs(int n){int…

上位机图像处理和嵌入式模块部署(qmacvisual点线测量)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 上面一篇文章&#xff0c;我们完成了直线的拟合操作。在实际场景中&#xff0c;拟合之后更多地是需要进行长度的测量。既然是测量&#xff0c;那么…

电源技术中的深力科强力推荐低成本高性能低 VCE(sat) 晶体管 NSS40302PDR2G提供更高的电源效率和更长的电池寿命

NSS40302PDR2G是一款低 VCE(sat) 双极晶体管&#xff0c;具有超低饱和电压 VCE(sat) 和高电流增益能力的表面贴装器件。用于需要经济、高效的能量控制的低电压、高速开关应用。典型应用有大容量存储产品&#xff08;例如磁盘驱动器和磁带驱动器&#xff09;中的低压电机控制。在…

Set A Light 3D Studio中文--- 打造专业级3D照明效果

Set A Light 3D Studio是一款专业的灯光模拟软件&#xff0c;专为摄影师和电影制片人打造。它允许用户在计算机上模拟并预览各种布光效果&#xff0c;助力拍摄出真实、精准且具有艺术感的作品。软件提供了丰富的灯光和场景模型&#xff0c;用户可以灵活调整光源参数&#xff0c…

全志R128 SDK HAL 模块开发指南——DMA Controller

DMA Controller 本文介绍RTOS 中DMA 驱动的接口及使用方法&#xff0c;为DMA 的使用者提供参考。 DMA 主要实现设备与设备、设备与 memory、memory 与 memory 之间的数据搬运与传输&#xff1b;BSP DMA 驱动主要实现设备驱动的底层细节&#xff0c;并为上层提供一套标准的 AP…

如何使用C语言实现文件操作

目录 文件打开和关闭 函数原型 案例展示 1.引入头文件 2. 定义字符数组与打开文件 3. 检查文件打开情况 4. 读取与写入文件 5. 关闭文件与清理资源 总结 文件打开和关闭 在编写程序的时候&#xff0c;在打开⽂件的同时&#xff0c;都会返回⼀个FILE*的指针变量指向该…

移动硬盘盒结合PD技术为电脑供电:一种便携高效的供电新方案

在数字化时代&#xff0c;电脑已经成为我们生活和工作中不可或缺的工具。而在电脑的使用过程中&#xff0c;供电问题一直是我们需要关注的重要方面。近年来&#xff0c;随着技术的不断进步&#xff0c;移动硬盘盒子与PD&#xff08;Power Delivery&#xff09;技术的结合&#…