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作用域。