笔试总结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、单例模式

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

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

相关文章

148 Linux 网络编程4 ,高并发服务器 --多路I/O转接服务器 - poll 这个非重点,

Poll 的实现和 select 很像。 实际上poll 的核心就是我们select的优化版本&#xff0c;加入了一个数组&#xff0c; 还将传入传出参数分离开了 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout);fds &#xff1a;需要监听的--文件描述符数组…

数据挖掘|数据集成|基于Python的数据集成关键问题处理

数据挖掘|数据集成|基于Python的数据集成关键问题处理 1. 实体识别2. 数据冗余与相关性分析3. 去除重复记录4. 数据值冲突的检测与处理5. 基于Python的数据集成5.1 merge()方法5.2 Concat()方法 数据集成是把来自多个数据库或文件等不同数据源的数据整合成一致的数据存储。其中…

基于docker创建深度学习开发环境

基于docker创建深度学习开发环境 记录几个链接 第一步&#xff1a;配置docker环境&#xff0c;此处大把教程&#xff0c;不再赘述第二步&#xff1a;拉取nvidia做好的cuda和cudnn镜像&#xff1a; docker pull nvcr.io/nvidia/cuda:12.2.0-devel-ubuntu20.04如果有其他需求&a…

vue3+threejs新手从零开发卡牌游戏(二):初始化场景

在删掉初始化中一些没用的代码后&#xff0c;在views目录下新建game文件夹&#xff0c;在里面新建一个index.vue&#xff0c;这里就当成游戏的主入口。 目录结构如下&#xff1a; 下面开始尝试创建场景&#xff1a; 一、添加一个div作为threejs的画布对象&#xff0c;之后整个…

ubuntu - 编译 linphone-sdk

业务需求需要定制sdk&#xff0c;首先声明我们需要的是在Android4.4上跑的sdk&#xff0c;因此本次编译的sdk最低支持为19&#xff08;不同版本需要的环境不一致&#xff09;&#xff0c;编译过程较容易&#xff0c;难点在于环境配置 环境准备 Ubuntu 18.04.6 android-sdk_r24.…

mysql分页查询多用GitCode平台

目录 一、在GitCode平台AI搜索结果&#xff08;这个更优&#xff09; 二、在百度搜索输入“mysql Java分页查询”的输出结果&#xff1a; 三、推荐的文章 四、GitCode的使用 1&#xff09;如搜索jdk11可以直接下载jdk11的包 2&#xff09;搜索开源项目 3&#xff09;如搜…

3.21 ARM day5

串口控制LED灯亮灭 main.c #include "uart4.h"int main() {//串口初始化uart4_init();//led初始化led_init();char i;int count 0;int count2 0;int count3 0;while (1){i getchar();putchar(i);//键盘输入a&#xff0c;串口工具显示aif (i 1){count;if (coun…

步进电机驱动器的接线与使用(接线详细)

今天小编就来继续学习与使用步行电机的学习&#xff0c;如果位置对你有帮助&#xff0c;评论收藏&#xff0c;点赞一下 步进电机驱动器 步进电机驱动器是一种专用于控制步进电机的电子设备&#xff0c;用于控制步进电机的转动和位置。步进电机是一种将电信号转换为机械运动的电…

Compose UI 之 Segmented buttons 分段按钮

Segmented buttons SegmentedButton 是一种分段式按钮组件,它允许用户在一组相关的选项中选择一个或几个。 上图中:① 单选的分段式按钮。② 多选的分段式按钮。 分段式按钮的几个特点: 分段式按钮是带有状态的按钮,又有单选和多选之分。 从设计上将,不论是单选或是多选…

第二十九章 配置 Web Gateway 的默认参数 - 与 IRIS 的连接(二)

文章目录 第二十九章 配置 Web Gateway 的默认参数 - 与IRIS 的连接(二)Event Log Rotation SizeMaximum Logged Request SizeSSL/TLS Library PathPreserve Mode Exclude File Types 第二十九章 配置 Web Gateway 的默认参数 - 与IRIS 的连接(二) Event Log Rotation Size 这…

fastjson2 反序列化包含多层泛型结构的实体类

前言 由于使用到httpUtill来调用接口 工具类的返回是字符串 其中接口的实现返回值是个多层泛型结构的实体类 例如Result<Page<UserDto>> 当使用 JSON.parseObject("res",new TypeReference<Result<Page<UserDto>>>{})发现在page中存在…

【GPT概念-03】:人工智能中的注意力机制

说明 注意力机制生成分数&#xff08;通常使用输入函数&#xff09;&#xff0c;确定对每个数据部分的关注程度。这些分数用于创建输入的加权总和&#xff0c;该总和馈送到下一个网络层。这允许模型捕获数据中的上下文和关系&#xff0c;而传统的固定序列处理方法可能会遗漏这…

QT(19)-QNetworkRequest

attribute(QNetworkRequest::Attribute code, const QVariant &defaultValue QVariant()) const 获取指定的请求属性。如果该属性未设置&#xff0c;则返回默认值。 hasRawHeader(const QByteArray &headerName) const 检查是否存在指定名称的原始请求头。 header(Q…

虚拟机扩展:虚拟机快照

虚拟机快照 在学习阶段我们无法避免的可能损坏Linux操作系统。如果损坏的话&#xff0c;重新安装一个Linux操作系统就会十分麻烦。 那我们就可以通过快照将当前虚拟机的状态保存下来&#xff0c;在以后系统损坏时通过快照恢复虚拟机到保存的状态。 制作并还原快照 在VMware …

静态方法 static foo()

静态方法&#xff08;Static Method&#xff09;是编程语言中的一种特殊方法&#xff0c;其特点是不依赖于类的实例即可被调用。在C和许多其他面向对象的编程语言中&#xff0c;静态方法通过类名来直接调用&#xff0c;而无需创建类的实例。这些方法属于类本身&#xff0c;而不…

数据结构(二)队列和栈

Java提供了java.util.Stack类来表示栈数据结构。Stack类是Vector类的子类&#xff0c;它实现了一个标准的后进先出&#xff08;LIFO&#xff09;栈。同样也提供了Queue接口&#xff0c;表示一系列按照特定顺序排列的元素&#xff0c;其中最早添加的元素将最先被移除&#xff08…

SAP HCM 0008信息类型间接评估与直接评估

如果在间接评估模块输入就是间接评估&#xff08;tarif是读取下图中的数据 a代表不需要输入工资项&#xff0c;b表示需要找工资相&#xff09; 不输入就是直接评估需要客户自己输入数字 第2个情况 summe求和 &#xff08;比如在0008中输入9000与9001 那么自动求出9002工资项数…

C# WPF编程-布局

C# WPF编程-布局 布局WPF布局原则布局过程布局容器布局属性Border控件StackPanel布局WrapPanel布局DockPanel布局Grid布局UniformGrid布局Canvas布局 布局 WPF布局原则 WPF窗口只能包含单个元素。为在WPF窗口中放置多个元素并创建更贴近实用的用户界面&#xff0c;需要在窗口…

uniapp 之 一些常用方法的封装(页面跳转,页面传参等)

util.js 提示&#xff1a;permission.js是uniapp插件市场由官方DCloud_heavensoft提供的App权限判断和提示插件。 import permision from "/js_sdk/wa-permission/permission.js"/*** uni.toast 封装* param {String} msg toast 提示内容* param {Number} duration …

SpringBoot项目如何打包成war包,并部署在tomcat上运行

项目场景&#xff1a; 正常情况下&#xff0c;我们开发 SpringBoot 项目&#xff0c;由于内置了Tomcat&#xff0c;所以项目可以直接启动&#xff0c;部署到服务器的时候&#xff0c;直接打成 jar 包&#xff0c;就可以运行了。 有时我们会需要打包成 war 包&#xff0c;放入外…