- 什么是IoC?
控制反转是将对象间的依赖关系以及生命周期交由IoC容器管理。
反转的是对象的装配以及生命周期管理的权力。
控制反转有两种实现:依赖查找和依赖注入。
- 依赖注入有几种方式,spring支持几种?
依赖注入有三种方式:接口注入,构造器注入和setter注入。
spring支持构造器注入和setter注入。
- @Autowried注解和@Resource的区别?
@Autowried注解是Spring提供,默认按byType类型注入,要求依赖对象必须存在。
如果想要使用byName注入,可以配合@Qualifier注解使用。
@Resource注解默认按照byName注入。
- Spring中用到哪些设计模式?
单例模式,bean默认都是单例的。
工厂模式,beanfactory用来创建对象。
模板方法,RestTemplate,JdbcTemplate等。
代理模式,aop的实现。
- Spirng中bean的scope有几种?
singleton:单例,默认,容器中仅有一个对象实例。
prototype:原型,每个请求创建一个对象,需要应用自己管理bean生命周期。
request:每个http请求创建一个对象,对象仅在当前请求中有效。
session:每个session会话创建一个对象,对象尽在当前会话中有效。
application:每个应用创建一个对象,对象仅在当前web应用中有效。
- spring中bean装配与自动装配
bean在spring容器中组合到一起称为装配。
byType:通过类型注入依赖对象,默认方式。
byName:通过名称注入依赖对象。
constructor:通过构造器注入依赖对象。
autodetect:先尝试构造器装配,不成功,使用byType。
no:不使用自动装配。
- spring aop
OOP:基本单位是类(Class);
AOP:基本单位是切面(Aspect);
Advice:定义了切面的工作内容以及执行时机。
point cut:定义了切面的工作地点,是特殊的连接点。
aspect:由advice + point cut组成。
joint point:可以执行切面的地点。
weaving:将切面应用到目标对象中。
introduction:向现有类添加新的属性和功能。
- 通知类型
Before:前置通知,在目标方法执行前执行。
around:环绕通知,在目标方法执行前后都执行
after returning:在目标方法正常执行后执行。
after throwing:目标方法出现异常后执行。
after finally:目标方法执行后执行。
- AOP实现方式
1. 静态代理
1.1 编译期织入
1.2 类加载期织入
2. 动态代理
2.1 JDK动态代理
2.2 CGLIB
10 Spring AOP也AspectJ AOP的区别
Spring AOP使用动态代理,仅支持方法级别的pointcut;
AspectJ AOP使用静态代理,支持属性级别的pointcut;
- Spring事务支持
1. 编程式事务
2. 声明式事务
- Spring中隔离级别
read_uncommitted:读未提及,允许读取未提交数据,会引发脏读,不可重复读与幻读。
read_committed:读已提交,允许读取并发事务已经提交的数据,解决脏读,不解决不可重复读与幻读。
repeatable_read:重复读,同一数据多次读取是相同的,解决脏读,不可重复读,不解决幻读。
serializable:串行化,解决所有问题,但性能差,不建议使用。
default:使用数据库默认隔离级别。
- Spring中传播属性
required:当前存在事务,在当前事务中运行,否则新建事务。
required_new:必须新建事务,当前存在事务挂起。
support:存在事务在事务中运行,不存在就以非事务运行。
not_support:在非事务中运行,存在事务则挂起。
mandatory:必须在事务中运行,不存在事务则抛出异常。
never:必须在非事务中运行,存在事务则抛出异常。
nested:存在事务,创建嵌套事务,否则类似required。
(nested是spring独有,内部事务作为外部事务的子事务,子事务和外部事务一同提交。
子事务回滚(try-catch块)不影响外部事务,但外部事务回滚,子事务也回滚。)
- Spring MVC工作流程
1. 用户请求到达DispatcherServlet。
2. DispathcerServlet将url交给HandlerMapping查找handler,HadnlerMapping将结果返回。
3. DispatcherServlet通过HandlerAdapter调用handler并返回结果。
4. DispatcherServlet将结果交给ViewResolver解析并返回View。
5. DispatcherServlet渲染View,返回给用户。