Spring面试题

45 阅读3分钟

什么是IOC和AOP

  • IOC即控制反转,将之前我们手动new bean的方式转为由容器帮我们创建、管理、销毁bean。
  • AOP即面向切面编程,是对传统面向对象方式的一种增强,底层采用了动态代理的技术,实现对业务方法的切入。

@Autowired和@Resource的区别

  1. 来源上,autowired来自spring,resource来自jsr250规范
  2. 注入依赖的方式上,autowired先根据类型进行查找,如果类型没有则报错,也可以设置autowired的required为false不报错,如果类型有多个,则按照名称进行查找。resource先根据名称进行查找,如果没有找到则按照类型进行查找,如果类型有多个则报错。

过滤器和拦截器的区别

  • 过滤器是基于servlet规范的,依赖于servlet容器;拦截器是基于spring框架的。
  • 过滤器可以拦截动态请求和静态请求;拦截器可以拦截动态请求。
  • 过滤器基于函数回调机制;拦截器基于动态代理。
  • 过滤器一般用于处理跨域情趣、字符集设置、日志记录等;拦截器一般用于权限控制、身份验证等。

spring中bean的生命周期

  1. 实例化
  2. 属性注入
  3. BeanPostProcessor的前置处理器
  4. 初始化节点
  5. BeanPostProcessor的后置处理器
  6. 使用
  7. 销毁

www.cnblogs.com/huangwentia…

什么是spring的循环依赖,spring如何解决的,以及如何避免循环依赖

1.循环依赖概念

循环依赖是多个bean彼此相互依赖,导致spring创建bean时陷入死循环。

2.spring的解决方式

利用spring的三级缓存处理,需要手动开启允许循环依赖

spring:
    main:
      allow-circular-references: true

前提: 1.仅支持单例(Singleton)作用域的 Bean 2.不支持构造器注入的循环依赖

3.避免循环依赖

  • 避免双向依赖,改为单向依赖。
  • 使用@Lazy延迟加载

blog.csdn.net/weixin_4532…

声明式事务失效的场景

  • 方法内部调用
  • 私有方法
  • 方法内部使用了多线程(需要硬编码的方式,控制多个线程处于同一事务)

spring的传播行为

  • PROPAGATION_REQUIRED:默认传播行为,如果当前没有事务,则开启一个新的事务;如果已存在事务,就加入到该事务中。
  • PROPAGATION_SUPPORTS:支持当前事务。如果当前有事务,则使用该事务;没有则非事务执行。
  • PROPAGATION_MANDATORY:强制必须存在当前事务中,否则抛出异常。
  • PROPAGATION_REQUIRES_NEW:不管当前是否存在事务,都会新开一个事务执行当前方法,并挂起其他已存在的事务。
  • PROPAGATION_NOT_SUPPORTED:当前方法直接以非事务方式执行,如果当前存在事务,则先将事务挂起,待当前函数执行完毕后恢复已经挂起的事务。
  • PROPAGATION_NEVER:当前方法必须以非事务方式执行,如果当前有事务,则抛出异常。
  • PROPAGATION_NESTED:如果当前事务存在,则开启一个嵌套事务并执行每一个任务,如果嵌套事务成功,则与当前事务共同提交;嵌套事务失败时,仅回滚嵌套事务,而当前事务则继续运行。、

blog.csdn.net/yuan520588/…