当前位置: 首页 > news >正文

Spring及相关框架的重要的问题

Java框架

问题一:Spring框架中的单例bean是线程安全的吗?

 看下图,不能被修改的成员变量就是无状态的类,无状态的类没有线程安全问题,所以在开发中尽量避免可修改的成员变量。

回答:不是线程安全的,Spring中有一个@Scope注解,默认的值是singleton,单例的,因为一般在Spring的bean中都是注入无状态的对象,没有线程安全问题;而如果在bean中定义了可修改的成员变量,则要考虑线程安全问题,可以使用多例或加锁来解决。

问题二:什么是AOP,有没有在项目中使用到AOP?Spring的事务如何实现?

将非业务逻辑代码(交叉业务)提取出来形成一个独立的横向切面(将业务逻辑看成是纵向的),以横向交叉的方式应用到业务流程中,使代码的复用性增强,降低模块间的耦合度,同时提高系统的可维护性。

常见的AOP使用场景:

  • 记录操作日志
  • 缓存处理
  • Spring中内置的事务处理

在后台开发中,都需要记录操作日志:

Spring的事务其本质是通过AOP实现的,对方法前后进行拦截,在执行方法之前开启事务,在执行完目标方法后根据执行情况提交或者回滚事务。

列举一些重要的Spring模块?
Spring Core:Spring框架的核心,提供了控制反转(IoC)容器和依赖注入(DI)功能。

Spring Beans:定义了Spring的beans的配置方式,包括基于注解和XML的配置。

Spring Context:提供了一种更加丰富的框架应用上下文,包括国际化、事件传播、资源访问等。

Spring AOP:面向切面编程模块,允许开发者定义横切关注点,如日志记录、事务管理等。

Spring DAO:数据访问对象模块,提供了对JDBC的抽象,简化了数据访问层的编码。

Spring JDBC:提供了对Java数据库连接(JDBC)的抽象和简化,使得数据库操作更加方便。

Spring ORM:对象关系映射模块,支持与Hibernate、JPA、MyBatis等ORM工具的集成。

Spring TX:事务管理模块,提供了声明式和编程式事务管理的支持。

BeanFactory 和 ApplicationContext有什么区别?
是spring的核心接口,都可以作为容器,ApplicationContext是BeanFactory的子接口。
BeanFactory: 是spring最底层的接口,包含各种Bean的定义和Bean的管理。
ApplicationContext: 作为BeanFactory的派生,除了有BeanFactory的功能以外,还提供了更多的功能。

区别:

BeanFactroy采用的是延迟加载形式来注入Bean的,使用到bean才会加载。ApplicationContext一次性加载所有bean。
BeanFactory需要手动注册,而ApplicationContext则是自动注册。
BeanFactory不支持国际化,ApplicationContext支持国际化(实现MessageSource接口)。
BeanFactory不支持AOP,ApplicationContext支持AOP,可以与Spring的AOP框架集成,提供声明式事务管理

问题三:SpringMVC的执行流程?

Spring 的常见注解有哪些?

第一类是:声明bean,有@Component、@Service、@Repository、@Controller

第二类是:依赖注入相关的,有@Autowired、@Qualifier、@Resourse

第三类是:设置作用域 @Scope

第四类是:spring配置相关的,比如@Configuration,@ComponentScan 和 @Bean

第五类是:跟aop相关做增强的注解 @Aspect,@Before,@After,@Around,@Pointcut

SpringMVC常见的注解有哪些?

有@RequestMapping:用于映射请求路径;

@RequestBody:注解实现接收http请求的json数据,将json转换为java对象;

@RequestParam:指定请求参数的名称;

@PathViriable:从请求路径下中获取请求参数(/user/{id}),传递给方法的形式参数;@ResponseBody:注解实现将controller方法返回对象转化为json对象响应给客户端。@RequestHeader:获取指定的请求头数据,还有像@PostMapping、@GetMapping这些。

Springboot自动配置原理

在Spring Boot项目中的引导类上有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装,分别是:

  • @SpringBootConfiguration

  • @EnableAutoConfiguration

  • @ComponentScan

其中@EnableAutoConfiguration是实现自动化配置的核心注解。

该注解通过@Import注解导入对应的配置选择器。关键的是内部就是读取了该项目和该项目引用的Jar包的的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。

在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。

一般条件判断会有像@ConditionalOnClass这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。

http://www.lryc.cn/news/419820.html

相关文章:

  • Linux Vim教程
  • 【学习笔记】多进程信号量控制
  • Redis与Memorycache的区别
  • docker和Helm Chart的基本命令和操作
  • Node中的CSRF攻击和防御
  • CSS 多按钮根据半圆弧度排列
  • 【Linux】网络编程套接字Scoket:UDP网络编程
  • 基于模糊PID控制器的puma560机器人控制系统的simulink建模与仿真
  • C语言文件操作超详解
  • 表字段显示tip
  • 十二、享元模式
  • 黑马Java零基础视频教程精华部分_18_Arrays各种方法
  • RAG私域问答场景超级详细方案(第一期方案)[1]:工业级别构建私域问答(知识处理、知识召回排序、搜索问答模块)
  • 【AI在医疗领域的应用】AI在疾病诊断、个性化治疗等领域的应用
  • SpEL结合AOP示例
  • 【Linux:环境变量】
  • 8月9日笔记
  • API 签名认证:AK(Access Key 访问密钥)和 SK(Secret Key 私密密钥)
  • Redis 单机和集群环境部署教程
  • 华为hcip-big data 学习笔记《一》大数据应用开发总指导
  • 用户画像架构图
  • 37.x86游戏实战-XXX遍历怪物数组
  • go语言中map为什么不会自动初始化?
  • 大数据面试SQL(一):合并日期重叠的活动
  • stm32应用、项目、调试
  • WEB渗透-未授权访问篇
  • x86_64、AArch64、ARM32、LoongArch64、RISC-V
  • git push上不去的问题Iremote reiectedl——文件过大的问题
  • Qt Creator卡顿
  • 数据结构笔记(其五)--串