Spring八股面试题看这些就够了

张开发
2026/4/11 23:50:31 15 分钟阅读

分享文章

Spring八股面试题看这些就够了
Spring问题Springspring和springweb和springboot的区别web是Spring的一个构建web程序的模块springboot是为了简化spring配置开发。SpringIOCIOC是什么是什么控制反转是创建管理对象的一种技术。解释正常我们创建对象都是要自己来new自己添加相应的依赖和属性但是使用SpringIOC我们就可以把对象的创建和管理交给Spring的容器来处理好处降低耦合便于我们管理资源Bean是什么spring容器里面的对象如何声明一个BeanComponentBean,ControllerBean和Component的区别Bean作用于方法Component作用于类需要ComponentScan来扫描注入Bean的注解Autowired默认按类型注入再按名称注入Qualifier设置注入哪个Spring注解允许再构造函数字段方法参数上使用Resource默认名称注入再按类型注入jdk注解只可以在字段和方法上使用Bean注入方式构造器注入setter注入字段注入Bean作用域单例和多例Scope来设置Bean线程安全吗多例每次都有新的创建一般来说是线程安全的。单例的话还需要看看Bean是否有状态包含可变的成员变量对象Bean生命周期实例化属性注入初始化执行Aware接口比如BeanFactoryAwareBeanNameAware执行BeanPostProcessor前置处理执行PostConstruct注解自定义的内容初始化执行BeanPostProcessor后置处理销毁执行PreDestory注解的自定义函数SpringAOPAOP的理解面相切面编程把与业务无关但是业务代码所共有的逻辑比如日志事务权限控制封装起来。减少重复代码降低耦合。原理是基于动态代理如果目标类实现了接口就使用JDK的动态代理ProxyInvocationHanlder如何没有就使用Cglib生成出被代理类的子类AOP的专业术语目标类代理类连接点目标类所有方法都是切入点拦截到的方法通知增强的逻辑切面通知切入点SpringAOP和AspectJ有什么区别运行时增强一个是编译时增强类加载时增强。AOP的通知类型多个切面的顺序如何控制实现ordered接口或者Order(3)注解SpringMVCSpringMVC有哪些组件DispatcherServlet处理器映射器处理器适配器请求处理器视图解析器请求发给DispatcherSerlet去找处理器映射器找到对应需要的处理器交给处理器适配器来调用请求处理器得到视图把视图交给视图解析来解析。不过前后端已经分离了现在只需要放回数据不需要返回view一般不需要视图解析器就直接使用RestController而不是使用Controller同一异常处理ControllerAdviceExceptionHanlderSpring有哪些设计模式工厂模式Bean的获取ApplicationContext模版模式比如jdbcTemplateStringRedisTemplate代理模式比如AOP使用了动态代理单例模式比如Bean默认单例适配器模式比如SpringMVC的处理器适配器Spring循环依赖循环依赖是什么两个Bean互相持有对方的引用互相依赖。怎么解决Spring默认只能解决setter字段注入的循环依赖。Spring设置了三个mapsingleonObjects存储的是已经实例化已经注入元素初始化好的BeanearlysingleonObjects存储的是提前暴露的对象可能是原始对象可能是代理对象只是实例化还没有注入元素singleonFactory存储的是对象的工厂ObjectFactory通过getObject来获取原始对象或者代理对象如何使用到AOP会提前暴露是用来处理AOP动态代理的问题。举个例子A依赖BB依赖AA实例化实例化会把对象工厂放到第三个map中A注入元素B但是三个缓存都没有找到Bean实例化BB开始注入元素A可以从三级缓存中找到执行getObject方法把A从三级缓存移除放到第二层B执行初始化把23级缓存的B移除把初始化好的B放到1级缓存中A从一级获取B初始化把23级缓存的B移除把初始化好的A放到1级缓存中只用二级缓存可以吗不可以无法处理AOP这种情况。如果只用二级缓存那么A注入的是B原始对象如果B初始化完成后使用的是代理类那么IOC容器就会出现两个B违反单例而且A注入的不是我们目标需要的B对象。三级缓存的对象工厂的getObject会提前得到代理对象Spring会智能的判断Lazy可以解决循环依赖吗可以的这个时候我们注入的是B的代理对象B还没有初始化等到需要执行B的函数的时候代理对象才会触发B的初始化。Spring事务事务的传播行为加入事务创建新的事物事务失效的情况加注解的方法不是public代码的异常被捕获了事务的传播行为不对非事务方法调用了事务方法事务异常类型不对没有交给Spring管理SpringBootSpringBootStarter是什么Starter是依赖描述符它事先帮我们打包好了常用的库和配置我们只需要引入Starter就可以直接使用相应的功能模块。比如 spring-boot-starter-mvc 我们引入就可以使用RequestBody之类的注解可以开发MVC程序spring-boot-starter-aop就可以使用AOP的功能starter的原理SpringBootApplication注解里面有一个注解是EnableAutoConfiguration注解它里面import了AutoConfigurationImportSelector类这个类会扫描jar包的META_INF目录下的spring.factories文件读取里面的配置。如何写一个starter其实很简单我们只需要写一个配置类把需要的依赖使用Bean来注入到容器在META_INF目录下的spring.factories文件添加这个配置类就行SpringBoot自动装配通过starter自动导入复杂的第三方依赖导入需要的库和配置通过注解和简单的配置来实现某块的功能说说几个starter说说拦截器和过滤器Spring基础SpringIOCSpringAOPSpringMVCSpring设计模式Spring循环依赖Spring事务事务失效SpringBoot

更多文章