Spring概念杂记

Spring:

概念:

Spring是一个项目管理框架,也是一套javaEE的解决方案;是众多设计模式的整合,让已存在的技术更具备易用性;将已有的框架,进行了有机的整合,基于Spring框架完成各个阶层的对接。

Spring注入:

1、 set注入

2、 有参构造注入

3、 接口注入 || 自动注入  

4、 自动注入的注解

@Autowried                                byType(根据引用类型进行注入)

@Resource("userServiceImpl")    byName  (根据括弧里边的名字)

IOC:

       InversionOf Control  控制反转

       将创建对象的控制权由代码反转给Spring的配置文件

       好处:解耦,提高维护性

DI:

       DependencyInjection 依赖注入

       将依赖的对象,作为实例变量,由Spring的工厂进行创建及赋值

Spring工厂创建对象的生命周期:

       工厂创建对象由一个属性控制:

Singleton:对象在加载配置文件时创建对象,并且在工厂关闭时销毁

Prototype:对象在使用时创建,由JVM的垃圾回收机制销毁,不受工厂控制

代理模式:

       将核心功能与辅助功能分离,达到核心功能更纯粹,辅助功能可复用。

动态代理模式:

       由Spring负责动态生成的代理类,为原始类添加额外的辅助功能

AOP:Aspect OrientedProgramming 面向切面编程

       AOP主要分为两大类:静态代理AspectJ为代表,

                           动态代理springAOP为代表

AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;而动态代理则在运行时借助于 JDK 动态代理、CGLIB 等在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。

       通过动态代理为原始类的原始方法添加额外的辅助功能

动态代理的实现原理

1、 JDK动态代理  (默认必须实现接口,其原理是模拟接口实现的方式)

2、 Cglib动态代理 (cglib不需要实现接口, 其原理是模拟子类继承的方式)

因此cglib这种代理模式是有缺点的:在static和final方法上应用横切关注点是无法做到的

AspectJ:

AspectJ是静态代理在编译期间就生成了class文件完成了代理。这点容易理解一种编译的技术

事务:

       保证一组业务操作数据完整性的数据库机制。

事务隔离属性:当多线程并发访问数据库时,可能会存在的问题

1、 脏读:一个事务读取到了另一个事务还未提交的数据

2、 不可重复读:一个事务内多次读取同一行的数据内容,其结果不一致

3、 幻影读:一个事务多次读取一张表的数据内容,其结果条数不一致

SpringMVC:

       轻量级的MVC框架,解决javaEE分层开发中的控制器问题

       SpringMVC的工作流程:

       SpringMVC工作流程描述

1.用户向服务器发送请求时,请求被Spring 前端控制器DispatcherServlet获取。

2.DispatcherServlet对请求URL进行解析(比如我们发送一个url如下的请求

http://localhost:8080/SpringMVC/hello.action),就会得到请求资源标示符(URI,相当于就是上面的hello.action )。然后根据URI,调用处理器映射器(HandlerMapping)获得该Handler配置的所有相关对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回。

3.DispatcherServlet获取上面返回的Handler,并选择一个适合的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

4.选择好合适的HandlerAdapter后就会开始执行Handler。在填充Handler的入参过程中,根据配置,Spring将帮你做一些额外的工作(我们不需要管):

EG:

      HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

      数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

      数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

      数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象(包含视图名或视图名和模型)

6.根据返回的ModelAndView对象,选择一个合适的ViewResolver返会给DispatcherServlet ;

7.ViewResolver结合,Model和View来渲染视图

8.最后将视图渲染结果返回给客户端

组件名词解释:

1.DispatcherServlet:前端控制器

等同于以前的Controller, 是整个流程的中心, 负责调用其他组件

2.HandlerMapping: 处理器映射器

负责根据请求找到Handler(处理器),springMVC中可以根据不同的映射器实现不同映射,比如 xml配置方式,注解方式,接口方式等

3.Handler:后端控制器

在前端控制器的控制下对具体的用户请求进行处理,所以一般情况下都需要开发者进行根据需求进行开发。

4.HandlerAdapter:处理器适配器

处理Handler,可以对多种类型的处理器进行执行,这是对适配器模式的应用体现。

5.ViewResolver : 视图解析器

负责将处理结果生成view视图、开发者可以根据需要开发view

拦截器和过滤器的区别:

       拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

        过滤器:是在javaweb中,你传入的requestresponse提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者strutsaction进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 strutsaction前统一设置字符集,或者去除掉一些非法字符.

截器是基于java的反射机制的,而过滤器是基于函数回调

拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。

拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

拦截器可以访问action上下文、值栈里的对象,而过滤器不能。

      

猜你喜欢

转载自blog.csdn.net/qq_41181619/article/details/81036674