Spring知识点总结
1、什么是Spring框架?使用Spring的好处有什么?
-
Spring框架是一个轻量级的容器,他通过AOP面向切面编程的实现方式与非入侵性的框架,实现了对持久层(DAO)、事务的支持,提供MVC的Web框架的实现,是一个全方位的应用程序框架。
-
IOC,控制反转。将对象的创建以及对象的生命周期管理的过程交给Spring容器进行,从而在开发过程中不再关注这些细节。
-
DI,依赖注入。在Spring创建对象的过程中,依据Spring的配置对对象的属性进行设置。
-
AOP,面向切面编程。
- 连接点
- 切入点
- 切面
- 通知
- 目标对象
-
-
Spring的好处:
- 轻量级框架,内存小
- 控制反转实现松散耦合,提高解耦性
- 支持面向切面编程,AOP,将业务逻辑与系统服务划分开来
- Spring包含管理了应用对象的生命周期与配置
- MVC框架
- 事务管理,Spring提供一个事务管理接口
2、Spring Aop、拦截器、过滤器的区别
- Spring AOP拦截器:只能拦截Spring管理Bean的访问(业务层Service)
- Interceptor拦截器:拦截以.action结尾的url,拦截Action的访问。
- Filter过滤器:拦截web访问url地址。
拦截器 | 过滤器 |
---|---|
基于Java的反射机制 | 基于java的函数回调 |
依赖于web框架 | 依赖于servlet容器 |
只能对action请求起作用 | 几乎对所有的请求起作用 |
可以访问action上下文,值栈里的对象 | 不能访问 |
拦截器在action生命周期中,可以被多次调用 | 过滤器只能在servlet容器初始化时调用一次 |
可以获取IOC容器中的各个bean |
-
拦截器:依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用.因此可以使用spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。
-
过滤器:依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据
3、Spring是否是线程安全?
-
spring是单例模式,所以每一次调用都用原来的对象,而不用实例化新的对象,这样会减少内存的使用。
-
spring大部分是线程安全的,原因是使用了ThreadLocal,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
ThreadLocal具体详见ThreadLocal-面试必问深度解析
-
使用 全局变量、静态变量,不是线程安全的。例如 SimpleDateForma