← 返回首页
Spring高频面试题详解
发表时间:2022-09-18 18:17:55
Spring高频面试题详解

1.Spring的两大核心特征是什么?

Spring的两大核心特性就是IOC和AOP,IOC(Inversion of Control),即“控制反转”;AOP(Aspect-Oriented Programming),即“面向切面编程”。

2.Spring的属性注入有哪些方式?

3.说说Spring AOP的实现原理

AOP实现和核心原理是动态代理机制。Spring AOP的动态代理主要由两种方式实现,JDK动态代理和cglib动态代理。

JDK动态代理与CGLIB动态代理的区别: - JDK动态代理只能对实现了接口的类生成代理,而不能使用抽象类,例如:mybatis的mapper文件是代理。使用反射完成。使用了动态生成字节码技术。 - CGLIB是针对类实现代理,接口和抽象类都可以使用,使用字节码处理框架ASM,对代理对象类的class文件加载进来,通过修改字节码生成子类。

4.Spring中的bean的作用域有哪些?

  1. singleton:单例,默认的作用域。
  2. prototype:原型,每次使用(注入或调用getBean()方法都会new一个新的对象,一旦被使用或者注入,spring就不再只有Bean的引用,清楚bean并释放资源是调用者的职责;
  3. request:请求作用域,针对每一次HTTP请求都会产生一个新的bean,仅适用于WebApplicationContext环境。
  4. session:会话作用域,每次一次新的会话都会产生一个新的对象。
  5. globalSession:global session为整个HTTP请求中,在作用域方面就是application;

5.说说Spring中bean的生命周期?

Bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类:

  1. Bean自身的方法:这个包括了Bean本身调用的方法和通过配置文件中的init-method和destroy-method指定的方法。
  2. Bean级生命周期接口方法:这个包括了BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean这些接口的方法。
  3. 容器级生命周期接口方法:这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”。
  4. 工厂后处理器接口方法:这个包括了AspectJWeavingEnabler, ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。

6.说说bean的id与name属性的区别。

7.什么是循环依赖?如何解决循环依赖?

循环依赖:就是一个或多个对象实例之间存在直接或间接的依赖关系,这种依赖关系构成了构成一个环形调用。

有以下三种循环依赖情形:

1)自我依赖

2)两个对象之间的直接依赖

3)多个对象之间的间接依赖

Spring通过三级缓存来解决循环依赖问题。

简单一句话,Spring通过三级缓存,提前暴露对象,通过AOP解决循环依赖。

8.@Resource与@Autowired的区别?

9.Spring框架中用到了哪些设计模式?

10.Spring如何管理事务?

Spring支持两种方式的事务管理: