【面试官】知道怎么解决Spring循环依赖吗?

  • 面试官:你说下对Spring IOC的理解?
  • 面试官:AOP呢?
  • 面试官:那AOP的原理是什么?
  • 面试官:JDK动态代理和CGCLIB动态代理哪个更快?
  • 面试官:知道怎么解决Spring循环依赖吗?

大家好,我是南哥。

一个Java学习与进阶的领路人,跟着南哥我们一起Java成长。

文章目录

  1. SpringIOC和AOP
    1. SpringIOC
    2. SpringAOP
    3. AOP的原理
  2. Spring循环依赖
    1. 解决Spring循环依赖

1. Spring IOC和AOP

1.1 Spring IOC

面试官:你说下对Spring IOC的理解?

Spring IOC其实是一种通过描述来创建和获取对象的技术,相比于最原始的通过new来创建对象,所有的对象都交由Spring IOC进行管理,我们管这些对象称为Spring Bean。

Spring Bean可以看成是班级里的学生,那IOC容器就是容纳学生的班级。每个Bean的分类、不同的生命周期,包括Prototype、Singleton、Request、Session、Global session都可以在IOC容器里进行管理。这其实是一种控制反转的思想,我们程序员把控制对象的权限都交由了靠谱的Spring IOC容器。

通过XML方式我们可以向Spring IOC描述我需要一个A对象。当Spring启动时这个Bean也就自动注入到IOC容器等待我们的使用。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="bean1" class="org.springframework.beans.factory.ConcurrentBeanFactoryBenchmark$ConcurrentBean"
			scope="prototype">
    <property name="date" value="2004/08/08"/>
  </bean>

</beans>

现在商业公司通过以上XML的方式已经是很少见了,Spring Boot提供了另一种通过注解来描述Bean的方式。Spring Boot底层基于注解的IOC容器是AnnotationConfigApplicationContext,这个留到我后续的文章再来讲解。

// 通过注解的方式来创建Bean
@Configuration
public class TokenConfig {
    /**
     * 设置token的类型
     **/
    @Bean
    public TokenStore tokenStore() {
        return new JwtTokenStore(jwtAccessTokenConverter()); // 设置token类型为JWT
    }
}

1.2 Spring AOP

面试官:AOP呢?

在整个软件编程的历史长河中,最先面世的一种编程范式叫做。但随着软件系统越

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java面试突击大厂 文章被收录于专栏

👉以面试官面试的形式,涵盖了你怒怼大厂面试官、拿下大厂面试所需掌握的核心知识、面试重点 👉相信一定对你顺利通关面试、拿到理想Offer有所帮助 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力

全部评论

相关推荐

什么情况下加什么行锁:这里考察的是对数据库加锁的理解。当多个事务尝试同时修改同一行数据时,可能会导致数据不一致,为了保证数据的一致性和事务的隔离性,数据库系统会在事务试图修改数据时对相关行加锁,直到事务提交或回滚。因此我们从可能导致修改同一行数据的场景出发,来进行回答。乐观锁的使用场景:乐观锁是一种并发控制策略,主要用于在多用户共享资源的场景下,尤其是在分布式系统和高并发环境下,用来减少锁的竞争和提高系统的整体吞吐量。乐观锁假设大多数情况下不会发生冲突,因此在读取数据时不立即加锁,而是在更新数据时才检查数据是否已被其他事务修改过。回答该问题,我们可以思考哪些场景不会发生冲突,也就是哪些场景是读取数据大于写入数据。三种限流算法的使用场景和实现:限流算法的主要目的是控制在一定时间内请求的数量,防止系统资源被耗尽。不同的算法有不同的特点和适用场景,选择合适的算法需要考虑到系统的实时性、准确性和灵活性需求。常见的限流算法包括固定窗口算法、滑动窗口算法和漏桶算法。redis持久化:Redis的持久化机制确保了数据的持久性和可靠性,即使在服务器重启或故障后,也能恢复数据。RDB和AOF是两种主要的持久化方式,它们在数据恢复速度、数据完整性和资源占用等方面有所不同,因此适用于不同的场景和需求。因此我们可以从两种方式的使用场景、实现方式进行解答。讲讲jdk1.8的垃圾回收jdk1.8的垃圾回收机制中,垃圾回收器的设计目标是在不同场景下提供最优的性能。这包括最小化应用程序暂停时间、最大化吞吐量、以及在大型堆上保持良好性能。不同的垃圾回收器通过采用不同的策略和算法来达到这些目标,从而适应不同的应用程序需求。我们可以从各个回收机制的实现、优劣势、使用场景进行回答。发生频繁的fullgc可能由什么原因导致Full&nbsp;GC涉及整个堆的垃圾回收,包括年轻代和老年代,因此它通常比仅针对年轻代的垃圾回收更加耗时,对系统性能的影响也更大。频繁的Full&nbsp;GC不仅会增加系统的暂停时间,还可能消耗大量的CPU资源,导致应用程序响应变慢甚至停止响应。Spring源码用到的设计模式这里主要考察面试者对于设计模式和Spring框架的综合理解,每种设计模式在Spring中的应用都有其特定的目的和场景,理解这些模式有助于深入掌握框架的内部机制。SpringBoot和Spring主要考察面试者对常用的两个开发框架的认知。Spring&nbsp;是一个全面的框架,提供了企业级应用开发的各种功能,包括依赖注入、面向切面编程、事务管理、数据访问、MVC框架等。而Spring&nbsp;Boot是在Spring基础上发展起来的一个子项目,旨在简化Spring应用的初始搭建以及开发过程,强调约定优于配置的原则。我们可以从两个框架的联系与区别进行回答。&nbsp;&nbsp;&nbsp;&nbsp;需要完整面经解析文档的,欢迎评论:面经解析👥面试题目 #Java#&nbsp;&nbsp;#面试#&nbsp;&nbsp;#小红书招聘#&nbsp;&nbsp;#秋招#&nbsp;&nbsp;#面试交流地#
点赞 评论 收藏
分享
6 17 评论
分享
牛客网
牛客企业服务