Spring面试大全-基础知识01

1.什么是Spring

Spring框架是用于构建企业级Java的开源框架,他通过依赖注入和IOC容器帮我我们管理对象;支持AOP,将非业务功能(日志,事务等)从我们业务代码中分离出来,提高了代码的可维护性;提供了强大的事务管理支持,是开发人员不需要过多关注事务的控制;支持模块化设计,开发者可以根据需要选择不同的模块,例如MVC,SpringData;我们可以通过Spring方便整合其他的组件满足业务需要,Sprign的主要目标,就是简化开发,提高项目的可维护性。

2.Spring的核心模块有哪些

  1. Core Container:
    Spring的核心模块,主要提供IOC依赖注入功能的支持,对Bean对象的管理以及国际化,JMS消息服务,SPEL表达式等

SPEL表达式,主要用于配置文件和@Value注解

  1. AOP:
    提供了切面支持,将事务管理和日志等功能从业务逻辑中分离
  2. SpringDataAccess:
    支持对数据访问的支持,和对象关系映射,简化了使用JDBC访问数据库,支持了声明式事务简化开发
  3. SpringWeb:
    提供了SpringMVC的实现,支持webSocket等
  4. SpringTest:
    单元测试

3.Spring框架用到了哪些设计模式

  1. 工厂设计模式 : Spring 使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。
  2. 代理设计模式:Spring的AOP功能的实现
  3. 单例设计模式:SpringBean都是默认单例的
  4. 模板方法模式:jdbcTemplate
  5. 适配器模式:SpringAOP的Advice,SpringMVC匹配Controller也使用了适配器模式

4.说一些Spring框架常用的注解有哪些

  1. @ComponentScan和@Component
    @ComponentScan会扫描加了@Component的类,并将这个类交给Spring容器管理
  2. @Controller控制层注解、@Service服务层注解、@Repository数据访问层注解
    本质上都是@Component,语义有所区别
  3. @Autowired和@Resource
    @Autowired是Spring提供的注解,按照类型进行装配
    @Resource是JDK提供的注解,默认按照名称装配,也可以指定按照类型
  4. @Configuration 声明当前类为配置类,可以替换xml配置文件
  5. @Bean
    将当前方法返回的Bean交给IOC容器管理,和@Component区别是
@Bean@Component
位置作用在方法上作用在类上
用途常用于在@Configuration定义的方法,方法返回的对象被注册成Bean交给Spring管理Spring会扫描加了@Configuration注解的类,并将他们注册为Bean
粒度可以更细粒度控制Bean,因为可以在方法中编写自定义的Bean配置的逻辑标识组件,只用于自动扫描注册,没有很惊喜的控制
  1. @Import :导入第三方包,或者导入配置类
@Configuration
public class AppConfig1 {@Beanpublic MyService myService() {return new MyService("Service from AppConfig1");}
}
@Configuration
public class AppConfig2 {@Beanpublic AnotherService anotherService() {return new AnotherService("AnotherService from AppConfig2");}
}
@Configuration
@Import({AppConfig1.class, AppConfig2.class})
public class MainConfig {}
public class MainApp {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);MyService myService = context.getBean(MyService.class);AnotherService anotherService = context.getBean(AnotherService.class);}
}
  1. @Value
    获取属性文件中的属性值

5.Spring、SpringMVC、SpringBoot有什么区别

SpringMVC是Spring的一个重要模块,帮助Spring构建MVC架构的能力,SpringBoot通过减少配置,开箱即用,简化了Spring的程序开发。

6.BeanFactory和FactoryBean有什么区别

  1. BeanFactory是Bean工厂,负责管理Bean的生命周期,是SpringIOC容器的和兴结构,ApplicationContext其实就是一种BeanFactory
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);// 通过 ApplicationContext 获取 Car 对象Car car = context.getBean(Car.class);
  1. FactoryBean也是一个bean,我们通过FactoryBean自定义Bean的生命周期
public class Car {private String brand;private String model;
}
class CarFactoryBean implements FactoryBean<Car> {private String brand;private String model;public void setBrand(String brand) {this.brand = brand;}public void setModel(String model) {this.model = model;}@Overridepublic Car getObject() throws Exception {// 在这里创建并返回实际的 Car 对象Car car = new Car();car.setBrand(brand);car.setModel(model);return car;}@Overridepublic Class<?> getObjectType() {return Car.class;}@Overridepublic boolean isSingleton() {return true;}
}
@Configuration
class AppConfig {@Beanpublic CarFactoryBean carFactoryBean() {CarFactoryBean factoryBean = new CarFactoryBean();factoryBean.setBrand("Toyota");factoryBean.setModel("Camry");return factoryBean;}
}
class MainApp {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);// 注意:获取 Car 对象时使用的是 beanName "carFactoryBean"Car car = context.getBean("carFactoryBean", Car.class);System.out.println(car);}
}

7.为什么不建议直接使用Spring的@Async

当在使用@Async时,如果不指定具体的线程池名称或者有多个线程池,那么其使用的是就是默认线程池SimpleAsyncTaskExecutor,而该线程池的默认配置为(在TaskExecutionProperties中)容量:Integer.MAX_VALUE,最大线程数:Integer.MAX_VALUE,因此不会重复利用线程,创建线程不会有限制,当线程数量到达一定程度之后,就会影响相应的性能了,因此在使用@Async注解时,最好使用自定义线程池
详情请看Spring面试大全@Async使用02

8.Spring中如何实现多环境配置

  1. 配置文件使用@Profile注解
// 开发环境配置
@Configuration
@Profile("dev")
public class DevConfig {}
//生产环境的特定配置
@Configuration
@Profile("prod")
public class ProdConfig {}
  1. 激活profile
    在配置文件中执行环境
spring:profiles:active: local

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

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

相关文章

nginx支持wasm文件

背景 需要支持wasm文件,折腾半天不行,最后搜索wasm解决 这都是后话了,只知道是文件,不知道文件类型是wasm,关于什么事wasm直接百度 可以参考:WebAssembly(WASM) 和云原生 | wasm和区块链-CSDN博客 铺垫 Nginx通过服务器端文件的后缀名来判断这个文件属于什么类型&#xff0c…

介绍 回调函数及使用方法

回调函数是一种常见的编程概念,它允许我们将一个函数作为参数传递给另一个函数,并在需要的时候调用这个函数。回调函数通常用于异步编程、事件处理和模块间的通信。 在使用回调函数时,我们首先定义一个函数,然后将其作为参数传递给另一个函数。当满足某个条件或事件发生时…

uniapp开发一个交流社区小程序

uniapp开发一个交流社区小程序 假期的时候简单学了一下uniapp&#xff0c;想开发一款类似百度贴吧的交流社区来练练手。本篇文章主要记录开发过程&#xff0c;文末附上项目地址。 主要需要开发以下几个页面。 信息页面热榜页面用户主页用户信息页 信息页面 该页面的功能主要…

【Android】RxJava系列01-基本概述和基本用法

少年啊&#xff0c;要永远相信美好的事情即将发生 【Android】RxJava系列01-基本概述和基本用法 1.RxJava的概述2.RxJava的作用3.观察者和被观察者4.背压5.RxJava的基本用法步骤一&#xff0c;创建Observer&#xff08;观察者&#xff09;步骤二&#xff0c;创建Observable&…

华为nova12系列:图片HDR显示,让你的照片全面升级!

你是不是也想给自己的照片加点料&#xff0c;让它们看起来更真实、捕捉到更多的细节和光影&#xff1f;不用愁&#xff0c;华为nova12系列就为你量身打造了图片HDR显示技术&#xff0c;让你的照片从此焕发绚丽光芒&#xff01; 回忆一下&#xff0c;在节日的夜晚想拍下绚丽的灯…

自己动手写编译器:属性语法的实现

上一节我们研究了增强语法&#xff0c;本节我们看看何为属性语法。属性语法实则是在语法规则上附带上一些重要的解析信息&#xff0c;随着语法解析的进行&#xff0c;我们可以利用附带的解析信息去进行一系列操作&#xff0c;例如利用解析信息实现代码生成。我们先看属性语法的…

免费ai绘画软件选择哪个?

对于免费AI绘画软件的选择&#xff0c;因为每个软件都有其独特的优点和适用场景&#xff0c;可以根据个人的需求和技能水平来决定。以下是被广泛认可的AI绘画软件&#xff1a; 1、建e网AI-一款为建筑室内设计师提供AI绘图的智能工具&#xff0c;具有文字生图&#xff0c;方案优…

Python学习之路-Tornado基础:深入Tornado

Python学习之路-Tornado基础:深入Tornado Application settings 前面的学习中&#xff0c;我们在创建tornado.web.Application的对象时&#xff0c;传入了第一个参数——路由映射列表。实际上Application类的构造函数还接收很多关于tornado web应用的配置参数&#xff0c;在…

值得收藏的上千个涉及各个领域各个方面的免费的API接口服务,全网盘点并统计了网上诸多的免费API

值得收藏的上千个涉及各个领域各个方面的免费的API接口服务&#xff0c;全网盘点并统计了网上诸多的免费API。 一位开发者在GitHub上维护的免费API文档&#xff0c;不定期收录了互联网上开放的各种API接口。这些接口有些是来自第三方服务&#xff0c;你只需要在第三方注册成为会…

如何使用 FOFA 搜索引擎保姆级教程(附链接)

一、介绍 FOFA&#xff08;Fingerprinting Organizations with Advanced Tools&#xff09;是一家总部位于中国的网络安全公司提供的一款网络搜索引擎&#xff0c;专注于帮助用户收集和分析互联网上的设备和服务信息。FOFA 的主要特点包括&#xff1a; 设备指纹识别&#xff1…

面试150 颠倒二进制位 位运算分治 逻辑右移

Problem: 190. 颠倒二进制位 文章目录 思路复杂度位运算分治法 思路 &#x1f468;‍&#x1f3eb; 参考题解 >>>&#xff1a;逻辑右移&#xff08;符号位一起移动&#xff0c;高位补零&#xff09; 复杂度 时间复杂度: O ( log ⁡ n ) O(\log{n}) O(logn) 空间…

Win10系统搭建个人hMailServer邮件服务结合内网穿透远程发邮件

文章目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpola…

基于IATF思想构建网络安全治理体系

文章目录 前言一、企业网络安全现状(一)防御碎片化。(二)常见网络安全问题频发。(三)安全意识教育难度大。二、“纵深防御”式综合治理体系建设方案(一)三个核心要素(二)四个保障领域1、网络和基础设施2、区域边界3、计算环境4、支撑性基础设施总结前言 近年来,国家…

计算机网络_1.6.1 常见的三种计算机网络体系结构

1.6.1 常见的三种计算机网络体系结构 1、OSI&#xff08;七层协议&#xff09;标准失败的原因2、TCP/IP参考模型3、三种网络体系结构对比 笔记来源&#xff1a; B站 《深入浅出计算机网络》课程 1、OSI&#xff08;七层协议&#xff09;标准失败的原因 &#xff08;1&#xf…

Django的web框架Django Rest_Framework精讲(四)

文章目录 1.DRF认证组件Authentication2.权限Permissions3.限流Throttling4.过滤Filtering5.排序6.分页Pagination7.异常处理 Exceptions8.自动生成接口文档 大家好&#xff0c;我是景天&#xff0c;今天我们继续DRF的最后一讲&#xff0c;Django的web框架Django Rest_Framewor…

STM32--揭秘中断(简易土货版)

抢占优先级响应优先级 视频学习--中断​​​​​​​

正则表达式可视化工具regex-vis

什么是正则表达式 &#xff1f; 正则表达式是对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特定字符、及这些特定字符的组合&#xff0c;组成一个“规则字符串”&#xff0c;这个“规则字符串”用来表达对字符串的一种过滤逻辑。【百度百科】 正则表达式用简短…

Java和JavaScript的区别与联系

JavaScript 和 Java 是两种完全不同的编程语言&#xff0c;它们的名称虽然相似&#xff0c;但并没有直接的关系。 JavaScript 的名字来源于它最初被命名为 LiveScript&#xff0c;并在 1995 年被 Netscape 公司更名为 JavaScript&#xff0c;以吸引更多使用 Java 的开发者。这…

Ubuntu下的文件压缩与解压:gzip、bzip2、tar、rar 和 zip详解

Ubuntu下的文件压缩与解压&#xff1a;gzip、bzip2、tar、rar 和 zip详解 在 Ubuntu 操作系统中&#xff0c;文件压缩与解压是日常操作中常见的任务之一。本文将介绍五种常用的压缩和解压工具&#xff1a;gzip、bzip2、tar、rar 和 zip&#xff0c;在 Ubuntu 中的使用方法和常…

【图论】基环树

基环树其实并不是树&#xff0c;是指有n个点n条边的图&#xff0c;我们知道n个点n-1条边的连通图是树&#xff0c;再加一条边就会形成一个环&#xff0c;所以基环树中一定有一个环&#xff0c;长下面这样&#xff1a; 由基环树可以引申出基环内向树和基环外向树 基环内向树如…