Spring 经典面试题汇总——持续更新

1. Spring的两大特性是什么?

AOP(面向切面编程)和IOC(控制反转)。

  • AOP的原理是什么?实现AOP有哪些方式?

​ 答案:Spring AOP 的底层用的是动态代理,有JDK动态代理和CGlib动态代理。

JDK动态代理: 利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。

CGlib动态代理: 以CGLIB的方式进行代理,它采用底层字节码技术,将代理类的class文件加载进来,通过修改其字节码生成子类来处理。

区别: JDK代理只能对实现接口的类生成代理;CGLIB是针对类实现代理,继承指定类并生成一个子类,因此不能代理final修饰类。

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

  • no : 不进行自动装配,手动设置Bean的依赖关系。
  • byName: 根据Bean的名字进行自动装配。
  • byType: 根据Bean的类型进行自动装配。
  • constructor: 类似于byType,不过是应用于构造器的参数,如果正好有一个Bean与构造器的参数类型相同则可以自动装配,否则会导致错误。
  • autodetect: 如果有默认的构造器,则通过constructor的方式进行自动装配,否则使用byType的方式进行自动装配。

3. Spring框架有哪些模块组成?

  • Core
  • Bean
  • Context
  • Expression
  • JDBC
  • ORM
  • OXM
  • beJava Messaging Service(JMS)
  • Transaction
  • Web
  • Web-Servlet
  • Web-Struts
  • Web-Portlet

4. Spring IOC 的实现原理?

工厂模式+反射机制

  • 加载配置文件,解析成BeanDefinition放在Map里;
  • 调用getBean的时候,从BeanDefinition所属的Map里,拿出Class对象进行实例化,同时,如果有依赖关系,将递归调用getBean方法——完成依赖注入。

什么是Spring IOC容器?

​ Spring IOC负责创建对象,管理对象,装配对象,配置对象,并且管理这些对象的整个生命周期。

5.Spring AOP?

AOP 面向切面编程,将那些与业务无关却,却为业务模块所共同调用的逻辑或责任封装起来,一边减少系统的重复代码,降低模块间的耦合度,如日志管理、事物处理和权限控制。

Aspect 切面 它将对个类的通用行为封装成可用的模块,该模块含有一组API提供横切功能。切面通过带有@Aspect注解实现。

6. Spring Bean 的作用域有哪些?

singleton : 唯一bean实例,Spring中的bean默认都是单例。

prototype :  每次请求都会换件一个新的bean实例。

request: 每一次http请求都会产生一个新的bean,该bean仅在当前http request内有效。

session: 每一次http请求都会产生一个新的bean,该bean仅在当前http session内有效。

global-session: 全局session作用域。

你可能感兴趣的:(Spring)