本文最后更新于 2025-05-10,文章内容可能已经过时。

Spring Bean一共有几种作用域?

image-20250510110220278

@Qualifier注解有什么作用

image-20250510110440283

@Bean和@Component有什么区别?

image-20250510110459475

@Component、@Controller、@Repository和@Service 的区别?

image-20250510110518500

Spring中的@Primary注解的作用是什么?

image-20250510110543840

Spring中的@Value注解的作用是什么?

image-20250510110559511

Spring中的@ModelAttribute注解的作用是什么?

image-20250510110614544

在Spring中,拦截器和过滤器有什么区别?

image-20250510110632374

什么是循环依赖(常问)?

image-20250510110709282

Spring如何解决循环依赖?

image-20250510110733182

为什么Spring循环依赖需要三级缓存,二级不够吗?

image-20250510110751947

看过源码吗?说下Spring由哪些重要的模块组成?

image-20250510110812183

什么是 Spring IOC?2

image-20250510110826801

Spring lOC 有什么好处?

image-20250510110847153

Spring 中的 DI 是什么?

image-20250510110905607

什么是 Spring Bean?

image-20250510110921438

Spring 中的 BeanFactory 是什么?

image-20250510110936100

Spring 中的 FactoryBean 是什么?

image-20250510110955475

Spring 中的 ObjectFactory 是什么?

image-20250510111013063

Spring 中的 ApplicationContext 是什么?

image-20250510111037010

Spring一共有几种注入方式?

image-20250510111100238

什么是 AOP?

image-20250510111130241

SpringAOP默认用的是什么动态代理,两者的区别?

image-20250510111149987

能说说 Spring拦截链的实现吗?

image-20250510111208210

Spring AOP 和 AspectJ 有什么区别?

image-20250510111222744

说下 Spring Bean 的生命周期?

image-20250510111239161

说下对 Spring MVC 的理解?

image-20250510111305701

Spring MVC 具体的工作原理?

image-20250510111322501

SpringMVC父子容器是什么知道吗?

image-20250510111348898

你了解的 Spring都用到哪些设计模式?

image-20250510111407755

Spring事务有几个隔离级别?

image-20250510111436223

Spring有哪几种事务传播行为?

image-20250510111455793

Spring事务传播行为有什么用?

image-20250510111736241

Spring 的优点

image-20250510111802498

Spring AOP相关术语都有哪些?

image-20250510111819490

Spring 通知有哪些类型?

image-20250510111838997

Spring lOC 容器初始化过程?

image-20250510111901436

Spring Bean注册到容器有哪些方式?

Snipaste_2025-05-10_11-19-14

Spring自动装配的方式有哪些?

image-20250510111939615

Spring事务在什么情况下会失效?

Spring事务失效的常见场景及解决:

  1. 非public方法

  2. 原因:Spring默认只代理public方法。

  3. 解决:方法改为public,或用AspectJ模式。

  4. 自调用(同类方法调用)

  5. 原因:内部调用不走代理,事务不生效。

  6. 解决:拆分到其他Bean,或通过代理对象调用。

  7. 异常未抛出或类型不符

  8. 原因:默认只回滚RuntimeException,捕获异常未抛出。

  9. 解决:配置@Transactional(rollbackFor=Exception.class),或在catch中手动回滚。

  10. 数据库引擎不支持

  11. 原因:如MyISAM引擎。

  12. 解决:切换为InnoDB等支持事务的引擎。

  13. 传播行为配置错误

  14. 原因:如用SUPPORTS但无事务上下文。

  15. 解决:根据场景选REQUIRED等合适传播行为。

  16. 多数据源未指定管理器

  17. 原因:未显式指定事务管理器名。

  18. 解决:注解中加@Transactional("managerName")。

  19. 未启用事务管理

  20. 原因:缺少@EnableTransactionManagement。

  21. 解决:主配置类添加该注解。

  22. 静态/私有方法使用事务

  23. 原因:AOP无法代理私有或静态方法。

  24. 解决:仅用于公有实例方法。


一句话总结:确保方法公开、异常抛出、引擎支持、传播合理,避免自调用,检查配置和代理。

说说 Spring 启动过程?

image-20250510112351754

Spring的单例Bean是否有并发安全问题?

image-20250510112409849

Spring中的@Profile注解的作用是什么?

image-20250510112430798

Spring中的@PostConstruct和@PreDestroy注解的作用是什么?

image-20250510112445783

Spring中的@RequestBody和@ResponseBody注解的作用是什么?

Snipaste_2025-05-10_11-25-31

Spring中的@PathVariable注解的作用是什么?

image-20250510112556838

Spring中的@ExceptionHandler注解的作用是什么?

image-20250510112615505

Spring中的@ResponseStatus注解的作用是什么?

image-20250510112634029

Spring中的@RequestHeader和@CookieValue注解的作用是什么?

image-20250510112653357

Spring中的@SessionAttribute注解的作用是什么?

image-20250510112723583

Spring 中的@Validated 和@Valid 注解有什么区别?

image-20250510112742742

Spring 中的@Scheduled 注解的作用是什么?

image-20250510112758727

Spring中的@Cacheable和@CacheEvict 注解的作用是什么?

image-20250510112821103

Spring中的@Conditional注解的作用是什么?

image-20250510112838018

Spring 中的@Lazy注解的作用是什么?

image-20250510112853806

Spring 中的@PropertySource 注解的作用是什么?

image-20250510112912569

Spring中的@EventListener注解的作用是什么?

image-20250510112930098

@Async 注解的原理是什么?

image-20250510112945215

Spring 和 Spring MVC 的关系是什么?

image-20250510112959516

Spring WebFlux 是什么?它与 Spring MVC 有何不同?

image-20250510113019270

介绍下 Spring MVC 的核心组件?

image-20250510113040540

什么是Restful 风格的接口?

image-20250510113058078

Spring MVC中的Controller是什么?如何定义一个Controller?

image-20250510113121468

SpringMVC中如何处理表单提交?

image-20250510113140156

SpringMVC中的视图解析器有什么作用?

image-20250510113200534

SpringMVC中的拦截器是什么?如何定义一个拦截器?

image-20250510113226179

SpringMVC中的国际化支持是如何实现的?

image-20250510113242392

Spring MVC中如何处理异常?

image-20250510113303163

Spring 中的 JPA 和 Hibernate 有什么区别?

image-20250510113319993

@Async如何避免内部调用失效?

image-20250510113337074

@Async什么时候会失效?

Spring中@Async注解失效的常见场景及解决方案如下:


1. 自调用(同类内部调用)

  • 原因:在同一个类中,方法A调用被@Async标注的方法B时,由于Spring的动态代理机制仅作用于外部调用,内部调用会绕过代理,导致异步失效。
  • 解决:
  • 将异步方法拆分到另一个Bean中,通过依赖注入调用。
  • 使用AopContext.currentProxy()获取代理对象调用(需在配置类添加@EnableAspectJAutoProxy(exposeProxy = true))。

2. 未启用异步支持

  • 原因:未在配置类添加@EnableAsync注解,导致异步处理未被激活。
  • 解决:在任意配置类上添加@EnableAsync以启用异步支持。

3. 非public方法

  • 原因:@Async基于AOP代理实现,只有public方法才能被代理拦截。
  • 解决:确保异步方法为public,避免使用protected或private修饰符。

4. 线程池配置错误

  • 原因:未自定义线程池或配置不合理(如线程数过少、队列容量不足),导致任务无法提交或阻塞。
  • 解决:
  • 实现AsyncConfigurer接口自定义线程池参数。
  • 通过@Async("customExecutor")指定自定义线程池。

5. 异常处理不当

  • 原因:异步方法抛出异常时,若未通过Future捕获或未在方法内处理,调用者无法感知异常,任务可能静默失败。
  • 解决:
  • 返回Future类型并通过get()方法捕获异常。
  • 在异步方法内使用try-catch处理异常。

6. 静态方法或非Spring管理的Bean

  • 原因:
  • @Async无法作用于static方法(代理机制不生效)。
  • 异步方法所在的类未被Spring管理(如未标注@Service)。
  • 解决:
  • 确保异步方法为实例方法且所在类被Spring容器管理。

7. 返回类型不兼容

  • 原因:@Async方法仅支持void或Future/CompletableFuture返回类型,其他类型会导致异步失效。
  • 解决:调整返回类型为void或Future。

8. 与事务注解@Transactional冲突

  • 原因:@Transactional和@Async同时作用于同一方法时,事务可能因代理顺序问题失效。
  • 解决:
  • 将事务操作与异步调用拆分到不同方法中。
  • 自定义事务管理器并调整传播行为。

9. 直接通过new创建对象调用

  • 原因:通过new关键字实例化的对象未经过Spring代理,导致@Async失效。
  • 解决:始终通过依赖注入获取Bean实例。

排查建议

  • 日志检查:开启Spring Debug日志(logging.level.org.springframework.scheduling=DEBUG)观察异步任务提交记录。
  • 代理验证:注入Bean后检查是否为代理对象(类名包含$$EnhancerBySpringCGLIB$$)。