笔试总结01

news2024/9/21 16:45:06

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.coloradmin.cn/o/1535252.html

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

相关文章

旅游小程序的市场与发展趋势

随着科技的发展&#xff0c;移动互联网已经成为我们生活中不可或缺的一部分。在这个时代&#xff0c;小程序已经成为了一种新的趋势&#xff0c;尤其是在旅游行业。那么&#xff0c;旅游小程序有哪些市场&#xff0c;发展趋势又怎么样呢&#xff1f; 一、旅游小程序的市场 1. 用…

AI原生安全 亚信安全首个“人工智能安全实用手册”开放阅览

不断涌现的AI技术新应用和大模型技术革新&#xff0c;让我们感叹从没有像今天这样&#xff0c;离人工智能的未来如此之近。 追逐AI原生&#xff1f;企业组织基于并利用大模型技术探索和开发AI应用的无限可能&#xff0c;迎接生产与业务模式的全面的革新。 我们更应关心AI安全原…

Linux的基本使用

1.Linux的背景 1.1什么Linux Linux是⼀个操作系统.和Windows是"并列"的关系. 1.2Linux系统的优势 1. 开源(意味着免费,便宜) 2. 稳定(Linux可以运⾏很多年,都不会发⽣重⼤问题) 3. 安全(Linux只有管理员或者特定⽤⼾才能访问Linux内核) 4. ⾃由(不会被强加商业产品和…

JVM内存划分

一、运行时数据区域 堆、方法区&#xff08;元空间&#xff09;、虚拟机栈、本地方法栈、程序计数器。 Heap(堆)&#xff1a; 对象的实例以及数组的内存都是要在堆上进行分配的&#xff0c;堆是线程共享的一块区域&#xff0c;用来存放对象实例&#xff0c;也是垃圾回收&…

用大语言模型控制交通信号灯,有效缓解拥堵!

城市交通拥堵是一个全球性的问题&#xff0c;在众多缓解交通拥堵的策略中&#xff0c;提高路口交通信号控制的效率至关重要。传统的基于规则的交通信号控制&#xff08;TSC&#xff09;方法&#xff0c;由于其静态的、基于规则的算法&#xff0c;无法完全适应城市交通不断变化的…

RK3568笔记二十:PP-YOLOE部署测试

若该文为原创文章&#xff0c;转载请注明原文出处。 注&#xff1a;转换测试使用的是Autodl服务器&#xff0c;CUDA11.1版本&#xff0c;py3.8。 一、PP-YOLOE环境安装 创建环境 # 使用 conda 创建一个名为 PaddleYOLO 的环境&#xff0c;并指定 python 版本conda create -n…

[flask]flask的路由

路由的基本定义 路由就是一种映射关系。是绑定应用程序&#xff08;视图&#xff09;和url地址的一种一对一的映射关系&#xff01;在开发过程中&#xff0c;编写项目时所使用的路由往往是指代了框架/项目中用于完成路由功能的类&#xff0c;这个类一般就是路由类&#xff0c;…

电子方案定制 /家庭K歌话筒

无线K歌话筒是一种可以与智能手机、平板电脑或其他设备无线连接的话筒&#xff0c;主要用于唱歌、录音和娱乐。 东莞市酷得智能科技有限公司&#xff0c;作为一家专业的玩具底层方案服务商&#xff0c;与国内外多家优秀制造企业有着深度合作&#xff0c;始终坚持以客户为中心&…

从相机空间到像素空间的投影和反投影原理和代码

目录 从相机空间到像素空间的投影 效果 ​编辑 公式 ​编辑 代码 像素空间到相机空间的反投影 记录一下从相机空间到像素空间的投影&#xff08;3D-->2D&#xff09;和像素空间到相机空间的反投影&#xff08;2D-->3D&#xff09;。 推荐blog&#xff1a;SLAM入门之视…

【.net/.net core】后台生成echarts图片解决方案及.net core html转word方法

工具环境下载&#xff1a; EChartsConvert&#xff1a;https://gitee.com/saintlee/echartsconvert EChartsConvert为生成echarts图片的服务端&#xff0c;用于接收参数和生成echarts图表图片BASE64编码 PhantomJS:Download PhantomJS PhantomJS用来发布EChartsConvert服务…

Amazon SageMaker + Stable Diffusion 搭建文本生成图像模型

如果我们的计算机视觉系统要真正理解视觉世界&#xff0c;它们不仅必须能够识别图像&#xff0c;而且必须能够生成图像。文本到图像的 AI 模型仅根据简单的文字输入就可以生成图像。 近两年&#xff0c;以ChatGPT为代表的AIGC技术崭露头角&#xff0c;逐渐从学术研究的象牙塔迈…

基于python+vue云上水果超市的设计与实现flask-django-php-nodejs

本论文的主要内容包括&#xff1a; 第一&#xff0c;研究分析当下主流的web技术&#xff0c;结合超市日常管理方式&#xff0c;进行云上水果超市的数据库设计&#xff0c;设计云上水果超市功能&#xff0c;并对每个模块进行说明。 第二&#xff0c;陈列说明该系统实现所采用的架…

kubernetes-RBAC 鉴权

kubernetes-RBAC 鉴权 kubernetes-RBAC 鉴权1、查看整个k8s集群内部有哪些资源2、什么是鉴权2.1、鉴权的目的2.2、怎么去鉴权&#xff1a;RBAC2.3、对鉴权的理解&#x1f331;2.4、租户 3、对一些概念的解释3.1、概念简述3.2、账号类型&#xff1a;Useraccount和ServiceAccount…

AI绘画可以稳定生成中文了:白嫖阿里云部署AnyText

长久以来&#xff0c;在AI绘画中书写文字一直是个难题。即使到了SDXL时代&#xff0c;我们也只能输出英文&#xff0c;而且还经常出现漏掉字母的情况。现在阿里达摩院搞出了一个解决方案&#xff0c;可以在Stable Diffusion生成的作品中稳定输出中、英、日、韩等多种文字&#…

Prompt-RAG:在特定领域中应用的革新性无需向量嵌入的RAG技术

论文地址&#xff1a;https://arxiv.org/ftp/arxiv/papers/2401/2401.11246.pdf 原文地址&#xff1a;https://cobusgreyling.medium.com/prompt-rag-98288fb38190 2024 年 3 月 21 日 虽然 Prompt-RAG 确实有其局限性&#xff0c;但在特定情况下它可以有效地替代传统向量嵌入 …

基于Springboot+vue的在线试题题库管理系统+数据库+报告+免费远程调试

项目介绍: Springbootvue的在线试题题库管理系统&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 本文设计了一个基于Springbootvue的前后端分离的在线试题题库管理系统&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#x…

Java项目:68 ssm校园美食交流系统+vue

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 主要功能包括管理员&#xff1a;首页、个人中心、美食分类管理、美食信息管理、用户管理、管理员管理、论坛中心、系统管理。 前台首页&#…

Docker部署Alist全平台网盘神器结合内网穿透实现无公网IP访问云盘资源

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-oZuxWTWUiXLx3aQO {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

B011-springcloud alibaba rpc通信 Dubbo

目录 介绍实现提供统一业务api服务提供者1.导入依赖2添加dubbo配置3编写并暴露服务 服务消费者1.导入依赖2添加dubbo配置3引用服务 测试 介绍 Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC分布式服务框架&#xff0c;致力于提供高性能和透明化的 RPC远程服务调用方案&#xf…

数字化转型:传统行业的新出路?

近年来&#xff0c;数字化转型已成为各行各业的热议话题。许多传统行业正面临着巨大的挑战&#xff0c;例如市场竞争加剧、成本上升、利润率下降等。数字化转型被视为传统行业破局的关键。那么&#xff0c;数字化转型究竟是不是传统行业的新出路呢&#xff1f; 传统行业面临的挑…