一零七一、Spring大海捞针篇

IOC,AOP?

IOC(控制反转)是一种设计模式,它将对象的创建、依赖注入和管理交给了容器来完成,而不是由开发者手动管理。

这样做的好处是降低了组件之间的耦合度,提高了代码的可维护性和可扩展性。

AOP(面向切面编程)是一种编程思想,将应用业务逻辑和系统服务分离开,可以通过配置文件或注解的方式来定义切面和切点

Spring注入Bean的几种方式?

静态注入

工厂注入

set注入

构造注入

Bean的生命周期?

实例化->属性赋值->初始化->使用->销毁

Trancational注解的作用?

用于标记需要进行事务管理的方法或类,在执行过程中自动开启事务,简化事务管理代码,并提供了灵活的事务属性配置。

Spring常用注解有哪些?注解的作用,以及相似注解有何区别?

@Component:标记一个类为Spring容器的组件,通常用于普通的Java类。

@Controller:标记一个类为Spring MVC的控制器,负责处理用户请求并返回响应结果。

@Service:标记一个类为业务逻辑层(Service层)的组件,通常被用于注解Service类。

@Repository:标记一个类为持久层(Repository层)的组件,通常被用于注解DAO类。

@Autowired:自动装配,通过类型进行自动装配,将对应类型的Bean注入到属性、构造方法或方法参数中。

@Qualifier:结合@Autowired使用,通过指定Bean的名称来指定具体要注入的Bean。

@Value:注入属性值,可以将配置文件中的值注入到属性中。

@RequestMapping:用于映射请求路径和处理方法,指定URL与方法的对应关系。

@PathVariable:用于获取请求路径中的占位符参数。

@RequestBody:将请求体的内容绑定到方法的参数上。

@ResponseBody:将方法的返回值直接作为响应体返回给客户端。

@GetMapping、@PostMapping、@PutMapping、@DeleteMapping:更具体的映射注解,用于定义特定HTTP方法的请求映射。

相似注解的区别主要体现在使用场景和语义上的差异:

@Component、@Service和@Repository都可以用来标识组件,但它们的意图和使用场景不同。@Component是通用的组件标识,可以用于任何类型的组件;@Service通常用于标识业务逻辑层的组件;@Repository通常用于标识持久层(DAO)的组件。

@Autowired和@Qualifier常一起使用,@Autowired根据类型进行自动注入,而@Qualifier根据名称指定具体要注入的Bean。这两个注解可以结合使用,实现更精细的依赖注入。

@RequestMapping是Spring MVC的核心注解,用于映射请求路径和处理方法;@GetMapping、@PostMapping、@PutMapping、@DeleteMapping是对@RequestMapping的更加具体的映射注解,用于定义特定HTTP方法的请求映射。

Component与Bean的区别?

Component是一个用于标识类的注解,用于告诉Spring这个类是---个组件。

而Bean是一个在Spring容器中被管理的对象,可以是Component 注解标记的类,也可以是其他定义方式创建的对象。

BeanFactory、FactoryBean和ApplicationContext的区别?

BeanFactory(Bean工厂):是Spring框架中最基本的IoC容器,负责管理和创建Bean对象。它提供了基本的Bean定义、创建和获取功能

FactoryBean(工厂Bean):是一个特殊的Bean,它是通过实现FactoryBean接口来创建Bean实例的,可以自定义创建Bean。

ApplicationContext(应用上下文):是Spring框架中最常用的高级IoC容器,继承自BeanFactory接口,提供了更多的功能和特性。ApplicationContext在加载配置文件时就实例化所有的Bean,并完成Bean的依赖注入,因此比BeanFactory更加重量级。

Spring循环依赖问题如何解决?常见的解决方案?

三级缓存来解决

三级缓存:创建对象的工厂

二级缓存:没有初始化的半成品对象

一级缓存:完整对象,可以直接使用

三级缓存new了对象a和对象b,属性填充的时候b需要引用a,a进入二级缓存,b完成生命周期结束进入一级缓存,a从二级缓存进入一级缓存,

现在ab全部进入了一级缓存,拿到了ab对象
二级缓存可以解决循环依赖问题吗?

使用三级缓存的目的是为了不破坏Bean的生命周期,不使用AOP的动态代理二级缓存也是可以的

用了动态代理的话,多次获取动态代理的对象是不同的,不能解决

Spring的事务传播机制?

Spring的事务传播机制是指在一个业务方法调用另一个业务方法时,如何处理事务的传播行为。

REQUIRED(默认):如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常用的传播行为,它确保多个业务方法在同一个事务中执行。

常见的事务失效的场景有哪些?

没有用public修饰

this调用不会使用动态代理对象

没有用Spring容器去管理的Bean

Spring事务的底层实现原理?

AOP动态代理实现

spring bean是线程安全吗?

单例模式 线程不安全, 在单例作用域下,Spring容器只会创建一个Bean实例,并且该实例会被多个线程共享。

原型模式 线程安全, 在原型模式下,每次获取Bean时,都会创建新的Bean实例,线程安全。

Spring框架中使用了那些设计模式?谈---谈

IOC 通过IoC容器,Spring实现了对象的创建和管理,将对象的控制权交给了框架。

DI 通过DI,Spring框架负责将对象的依赖关系注入到对象中,而不是由对象自行创建依赖对象。这样可以降低对象之间的耦合性,提高代码的可维护性和扩展性。

工厂模式 BeanFactory作为IoC容器,负责创建和管理Bean的生命周期。它根据配置信息创建Bean实例,并在需要时将Bean注入到其他对象中。

单例模式 通过单例模式,Spring确保每个Bean只有一个实例存在于容器中,并且可以被多个对象共享使用。

动态代理 AOP借助动态代理实现,通过动态代理技术,Spring能够在运行时为目标对象动态生成代理对象,并在代理对象中添加切面逻辑。

springMVC分别代表什么?对应处理什么逻辑功能?

Model(模型):Model用于封装从数据库或其他数据源中获取的数据,以供视图(View)显示,Model可以通过ModelAndView对象传递给视图

View(视图):View负责展示数据给用户,并生成最终的响应结果。

Controller(控制器):Controller接收并处理用户的请求,并调用相应的服务或业务逻辑来完成请求的处理。

SpringBoot的启动流程?

1、SpringBoot加载application.properties或application.yml等配置文件

2、创建Application上下文执行环境

3、扫描注册Bean

4、加载配置,连接池,web容器

5、运行应用程序,启动内嵌的Tomcat,web服务器监听指定端口,处理HTTP请求并转发

6、调用服务,访问数据库

Spring,SpringBoot、SpringMVC的区别?

Spring:Spring是一个轻量级的Java开发框架,Spring框架的核心特性包括依赖注入(DI)、面向切面编程(AOP),也可以与Hibernate、MyBatis集成

SpringBoot:集成了内嵌的Tomcat服务器,让开发者更快的去构建web服务

Spring MVC:Web框架,提供一套丰富的功能组件,Spring MVC可以将请求的URL映射到对应的处理方法上,并通过ModelAndView对象将模型数据渲染到视图上。

SpringBoot与SpringCloud的区别

Spring Boot用于快速构建独立的Spring应用程序,而Spring Cloud用于构建分布式系统和微服务架构。

Spring Boot关注于单个应用程序的开发,提供了各种开箱即用的特性

Spring Cloud关注于分布式系统的开发,提供了一套分布式系统的解决方案。

在实际开发中,可以同时使用Spring Boot和Spring Cloud来构建高效、可扩展的分布式应用程序。

AOP底层是怎么实现的?

基于接口的动态代理使用Java的Proxy类来实现

基于类的动态代理使用CGLIB来生成子类,并覆盖被代理类的方法。

Aop有几种实现方式?有哪些区别?

JDK动态代理,JDK动态代理是基于Java的Proxy类实现的,动态生成目标对象的代理对象,不需要手动创建

CGLIB动态代理,通过生成目标类的子类,并覆盖其中的方法来实现代理。

相比于JDK动态代理,CGLIB动态代理的代理过程更加底层,性能也更高,但生成的代理类可能比较复杂。

springboot自动装配原理?

读取spring.factories文件,然后获取到EnableAutoConfiguration对应的值就是我们自动装配的默认配置类的全类名,

拿到这个集合后经过验证,去重,排除自动装配以及执行监听器等操作最终返回String数组,此数组就是我们最终要自动装配的配置类集合,SpringBoot再根据这些数据进行配置类的加载,完成整个自动装配。

restcontroller和controller区别是什么?

1.用Controller配合视图解析器才能返回到指定页面。在对应的方法上加上ResponseBody注解才能返回JSON,XML或自定义mediaType的内容到页面。

2.不可以只用RestController注解Controller,因为这样会让Controller中的内容不能返回jsp页面,而且会直接返回Return里的内容。

3.RestController相当于Controller和ResponseBody两者合并起来的作用。

requestbody和responsebody的区别?

@RequestBody用于获取请求体中的数据并将其转换为方法参数,@ResponseBody用于将方法的返回值直接作为响应体返回给客户端

autowhile和resource注解的区别

@Autowired和@Resource都是用于依赖注入的注解,但是@Autowired是Spring框架提供的注解,按照类型自动装配;而@Resource是Java EE规范的注解,按照名称自动装配。

对象的生命周期?

创建->使用->销毁->垃圾回收

component和Bean注解的区别?

@Component 注解作用于类,而 @Bean 注解作用于方法、

@Component 通常是通过路径扫描来自动侦测以及自动装配到 Spring 容器中

@Bean 告诉了 Spring 这是某个类的实例,当我们需要用它的时候还给我。

spring中的事务?

声明式事务:通过在配置文件中或使用注解的方式声明事务的属性,让Spring框架自动为方法或类应用事务管理

编程式事务:通过编写代码手动管理事务的开启、提交、回滚等操作。在编程式事务管理中,需要使用Spring提供的TransactionTemplate或PlatformTransactionManager接口来进行事务控制。


相关推荐
Ai 编码助手1 分钟前
Go语言 实现将中文转化为拼音
开发语言·后端·golang
hummhumm3 分钟前
第 12 章 - Go语言 方法
java·开发语言·javascript·后端·python·sql·golang
hummhumm3 分钟前
第 8 章 - Go语言 数组与切片
java·开发语言·javascript·python·sql·golang·database
尼克_张6 分钟前
tomcat配合geoserver安装及使用
java·tomcat
杜杜的man8 分钟前
【go从零单排】Directories、Temporary Files and Directories目录和临时目录、临时文件
开发语言·后端·golang
wywcool18 分钟前
JVM学习之路(5)垃圾回收
java·jvm·后端·学习
-seventy-37 分钟前
Java Web 工程全貌
java
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ43 分钟前
idea 删除本地分支后,弹窗 delete tracked brank
java·ide·intellij-idea
言慢行善44 分钟前
idea出现的问题
java·ide·intellij-idea
杨荧1 小时前
【JAVA毕业设计】基于Vue和SpringBoot的宠物咖啡馆平台
java·开发语言·jvm·vue.js·spring boot·spring cloud·开源