1. Spring 循环依赖是如何解决的
在Spring中,解决循环依赖的方式引入三级缓存.Spring中bean的创建过程可以分为两步,第一步叫实例化,第二步是初始化。解决循环依赖就是加载实例的半成品。在构建bean A时,如果需要未完全加载的其他bean B时,先加载bean B的半成品,完成bean A 的加载。
三级缓存:一级缓存,存储的是完整创建好的单例bean对象
二级缓存,存储尚未创建好的单例bean对象
三级缓存,存储的是单例bean的创建工厂
2. Spring和Springboot的区别
Spring是一个非常强大的企业级Java开发框架。提供一系列模块来支持不同的应用需求,如依赖注入,面向切面编程,事务管理,Web应用程序开发等。Springboot的出现,主要是起到了简化Spring应用程序的开发和部署,特别是用于构建微服务和快速开发的应用程序。
相比与Spring,Springboot主要在下面几个方面提升了效率,降低开发成本:
1. 自动装配,Spring boot 通过auto-configuration来减少开发人员的配置工作。通过一个个start依赖,使得开发人员更加专注与业务逻辑而不是配置。
2. 内嵌web服务器,springboot内置了常见的web服务器(Tomcat,Jetty),可以轻松创建可运行的独立应用程序,无需外部web服务器
3. 约定大于配置思想,Spring boot遵循约定大于配置的思想,通过一种约定的方式,来降低开发人员的配置工作。如默认读取spring.factories来加载starter,读取application.yml或application.properties文件进行属性配置等。
3. Springboot的自动装配是如何实现的?
Spring Boot的自动装配是通过条件注解和Spring Boot Starter实现的。
入口类注解 @SpringBootApplication -- @EnableAutoConfiguration,@SpringBootConfiguration, @ComponentScan
@EnableAutoConfiguration-》AutoConfigurationImportSelector组件
SpringFactoriesLoader读取META-INF/spring.factories文件,获取配置类的全路径类名
条件注解进行过滤,@Conditional,@ConditionalOnClass等
ImportSelector接口
BeanDefinition
实例化Bean对象
总的来说,Spring Boot的自动装配大大简化了项目的配置和初始化过程,它通过一系列的机制来智能地确定哪些组件应该被自动配置,并且允许开发者按需进行定制。这种自动化和约定大于配置的理念,使得Spring Boot能够快速启动和运行,同时保持了很高的灵活性。
4. Spring IOC 的简单理解
IOC就是控制反转,在传统的程序设计中,应用程序代码控制着对象的创建和管理。在IOC中,控制关系发生了反转,控制权被转移到spring容器,容器来负责对象的创建和管理,并且在需要的时候时将它们注入到应用程序。这样实现的好处,使用者不用关心引用bean的实现细节,不用创建多个相同的bean,bean的修改依赖无需感知。
5. Spring AOP的理解
AOP 面向切面编程,把公共的逻辑抽出来,让开发者更加专注业务的开发。Spring AOP 是通过代理模式实现的,具体有两种方式,JDK动态代理和CGLIB动态代理。在实际使用中,Spring AOP可以应用于多种场景,如事务处理、权限判断和日志记录等。通过定义切点和增强,可以实现对这些横切关注点的模块化管理,从而提高代码的复用性和可维护性。我们一般是通过注解和AOP相结合。大概的实现思路就是先定义一个注解,然后通过AOP去发现使用过该注解的类,对该类的方法进行代理处理,增加额外的逻辑,譬如参数校验,缓存,日志打印等等。
6.Spring事务是如何实现?
Spring事务的原理主要涉及一下:
1.代理机制,Spring通过AOP提供事务管理的功能。在Spring中,事务管理通过代理机制来实现。Spring可以通过JDK动态代理或者CGLIB动态代理来为目标对象生成 代理对象,在代理对象中添加事务管理的逻辑。
2.事务管理器,Spring提供多种事务管理器,用于管理事务的提交,回滚等操作。
3.事务注解,Spring提供了@Transactional注解,通过在方法或者类上注解,将方法或者类纳入事务管理范围,可以配置事务传播机制,隔离级别,超时时间,异常类型等。
4.事务切面,Spring通过AOP将事务管理功能织入目标方法的执行过程中。在方法执行前开启事务,在方法执行后更具执行结果决定提交还是回滚事务。
综合来说,Spring事务的实现原理是通过AOP代理机制,事务管理器,事务注解和事务切面等多个组件共同协作实现对事务的管理。Spring事务提供了两种使用方式:声明式事务和编程式事务