一、Spring七大组件image-20200821075431512

1.核心容器(Spring core)

    Springcore相当于一个创建管理bean容器

    核心容器提供Spring框架基本功能。Spring以bean方式组织管理Java应用中的各个组件及其关系。Spring使用BeanFactory来产生和管理Bean,它是工厂模式实现。BeanFactory使用控制反转(IOC)模式应用配置依赖规范与实际的应用程序代码分开。BeanFactory使用依赖注入方式提供给组件依赖

2.Spring上下文(Spring context)

    Spring上下文一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,如JNDI、EJB、电子邮件国际化校验调度功能

2.1 spring context 包括什么

主要包括:

2.2 spring context生命周期

 public static void main(String[] args) {
     // 初始化启动
     AnnotationConfigApplicationContext acaContext = new AnnotationConfigApplicationContext(AppConfig.class);
     // 运行
     acaContext.getBean(ServiceA.class);
     // 关闭/销毁
     acaContext.close();
 }

3.Spring面向切面编程(Spring AOP)

3.1 什么是AOP?

    OOP(Object-Oriented Programming)面向对象编程,允许开发者定义纵向的关系,但并适用于定义横向的关系,导致了大量代码重复,而不利于各个模块的重用。

    AOP(Aspect-Oriented Programming),一般称为面向切面编程,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响公共行为逻辑抽取封装为一个可重用的模块这个模块命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高系统可维护性。可用于权限认证日志事务处理等。

3.2 AOP 的作用及其优势

作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强;

优势:减少重复代码提高开发效率,并且便于维护

3.3 AOP 相关概念

Target目标对象):代理目标对象

Proxy代理):一个类被 AOP 织入增强后,就产生一个结果代理类;

Joinpoint连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring支持方法类型的连接点(可以被增强的方法);

Pointcut切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义(真正被增强的方法);

Advice通知/ 增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知(对目标方法进行增强的方法);

Aspect切面):是切入点通知(引介)的结合

Weaving(织入):是指把增强应用到目标对象来创建新的代理对象过程spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入(切入点和增强结合过程):

编译期:切面在目标类编译时被织入。AspectJ的织入编译器是以这种方式织入切面的;
加载期:切面在目标类加载到JVM时被织入。需要特殊的类加载器,它可以在目标类被引入应用之前增强该目标类的字节码。AspectJ5的加载时织入就支持以这种方式织入切面;
运行期:切面在应用运行某个时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态地创建一个代理对象。SpringAOP就是以这种方式织入切面。

3.4 Spring AOP and AspectJ AOP 有什么区别?AOP 有哪些实现方式?

    AOP实现关键在于代理模式,AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ;动态代理则以Spring AOP为代表

(1)AspectJ是静态代理的增强,所谓静态代理,就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强,他会在编译阶段将AspectJ(切面)织入到Java字节码中,运行时候就是增强之后的AOP对象

(2)Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是每次运行时在内存临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

3.5 AOP 的底层实现

    实际上,AOP 的底层通过 Spring 提供的的动态代理技术实现的。在运行期间,Spring通过动态代理技术动态的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强。

3.6 JDK动态代理和CGLIB动态代理的区别

    Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理:

    JDK动态代理只提供接口的代理,不支持类的代理。核心InvocationHandler接口和Proxy类,InvocationHandler 通过invoke()方法反射调用目标类中的代码,动态地将横切逻辑业务编织在一起;接着,Proxy利用 InvocationHandler动态创建一个符合某一接口的的实例, 生成目标类的代理对象。
    如果代理类没有实现 InvocationHandler 接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成类库可以在运行时动态的生成指定类的一个子类对象,并覆盖其中特定方法并添加增强代码,从而实现AOP。CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记final,那么它是无法使用CGLIB做动态代理的。
静态代理与动态代理区别在于生成AOP代理对象的时机不同相对来说AspectJ的静态代理方式具有更好性能,但是AspectJ需要特定的编译器进行处理,而Spring AOP则无需特定的编译器处理

    InvocationHandlerinvoke(Object proxy,Method method,Object[] args):proxy是最终生成的代理实例; method 是被代理目标实例某个具体方法; args 是被代理目标实例某个方法的具体入参, 在方法反射调用时使用。

3.7 AOP 开发明确的事项

1)需要编写内容
编写核心业务代码(目标类的目标方法);

编写切面类,切面类中有通知(增强功能方法);

配置文件中,配置织入关系,即将哪些通知与哪些连接点进行结合。

2)AOP 技术实现的内容
Spring 框架监控切入点方法的执行。一旦监控切入点方法被运行,使用代理机制,动态创建目标对象的代理对象,根据通知类别,在代理对象的对应位置,将通知对应的功能织入,完成完整的代码逻辑运行。

3)AOP 底层使用哪种代理方式
spring 中,框架会根据目标类是否实现接口来决定采用哪种动态代理的方式。
 

4.Spring DAO模块

    DAO模式主要目的是将持久相关问题与一般的的业务规则工作隔离开来。Spring 中的DAO提供一致的方式访问数据库,不管采用何种持久化技术,Spring都提供一直的编程模型。Spring还对不同持久层技术提供一致的DAO方式的异常层次结构

4.1 什么是DAO

    DAO(Data Access Object)是用于访问数据的对象,虽然在大多数情况下将数存在数据库中,但这并不是唯一选择,也可以数据存储文件中或LDAP中。DAO不但屏蔽数据存储的最终介质的不同,也屏蔽了具体的实现技术的不同。提供DAO层的抽象可以带来一些好处:可以很容易地构造模拟对象,方便单元测试的开展;在使用切面时会有更多的选择,既可以使用JDK动态代理,又可以使用 CGLib动态代理。

4.2 Spring DAO的内容

5.Spring ORM模块

    ORM: 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象关系数据库存在互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单方案采用编码方式,为每一种可能数据库访问操作提供单独的方法。

    ORM提供了实现持久化层的另一种模式,它采用映射元数据描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库之间充当桥梁。Java典型的ORM中间件有:Hibernate,ibatis,speedframework

ORM的方法论基于三个核心原则
  · 简单:以最基本的形式建模数据。
  · 传达性:数据库结构被任何人都能理解语言文档化。
  · 精确性:基于数据模型创建正确标准化了的结构

    Spring 与所有的主要的ORM映射框架集成的很好,包括Hibernate、JDO实现、TopLink和IBatis SQL Map等。Spring为所有的这些框架提供了模板之类的辅助类,达成了一致的编程风格

6.Spring Web模块

    Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。Web层使用Web层框架,可选的,可以是Spring自己的MVC框架,或者提供的Web框架,如Struts、Webwork、tapestry和jsf

7.Spring MVC框架(Spring WebMVC)

    SpringMVC 是一种基于 Java 的实现 MVC 设计模型请求驱动类型的轻量级 Web 框架,属于SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 中。

    SpringMVC 已经成为目前最主流的MVC框架之一,并且随着Spring3.0 的发布,全面超越 Struts2,成为最优秀的 MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求控制器,而无须实现任何接口。同时它还支持 RESTful 编程风格请求

    MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的。Spring的MVC框架提供清晰的角色划分控制器验证器、命令对象、表单对象和模型对象、分发器、处理器映射和视图解析器。Spring支持多种视图技术。

7.1 什么是SpringMVC

    SpringMVC就是一个Spring内置的MVC框架。

     MVC框架,它解决WEB开发常见问题(参数接收文件上传表单验证国际化等等),而且使用简单,与Spring无缝集成支持 RESTful风格的URL请求采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。

7.2 SpringMVC的作用

    MVC模式(Model-View-Controller):解决页面代码和后台代码的分离

7.3 SpringMVC原理

    在没有使用SpringMVC之前我们都是使用Servlet在做Web开发。但是使用Servlet开发接收请求参数数据共享页面跳转操作相对比较复杂servletjava进行web开发的标准,既然springMVC是对servlet封装,那么很显然SpringMVC底层就是Servlet,SpringMVC就是对Servlet进行深层次的封装

7.4 什么mvc模式?

    MVC分别是:模型model(javabean)、视图view(jsp/img)、控制器Controller(Action/servlet)。

C存在的目的就是为了保证M和V的一致性,当M发生改变时,C可以把M中的新内容更新到V中。

(1)原始mvc模式

 

(2)WEB开发的MVC

 

7.5 SpringMVC执行流程原理

 SpringMVC执行流程

01、用户发送请求前端控制器DispatcherServlet拦截进行处理。
02、DispatcherServlet收到请求调用HandlerMapping处理器映射器)。
03、HandlerMapping找到具体的处理器(查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。
04、DispatcherServlet调用HandlerAdapter(处理器适配器)。
05、HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。
06、Controller执行完成返回ModelAndView对象。
07、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
08、DispatcherServlet将ModelAndView传给ViewReslover视图解析器)。
09、ViewReslover解析ModelAndView后返回具体View(视图)给DispatcherServlet。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应View给用户

涉及组件分析

1、前端控制器DispatcherServlet(不需要程序员开发)由框架提供,在web.xml中配置。
作用接收请求,响应结果,相当于转发器,中央处理器。
 
2、处理器映射器HandlerMapping(不需要程序员开发)由框架提供。
作用:根据请求的url查找Handler(处理器/Controller),可以通过XML和注解方式来映射。
 
3、处理器适配器HandlerAdapter(不需要程序员开发)由框架提供。
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler中的方法。
 
4、处理器Handler(也称之为Controller,需要程序员开发)
注意编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。
作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。
 
5、视图解析器ViewResolver(不需要程序员开发)由框架提供。
作用:进行视图解析,把逻辑视图解析成真正的物理视图。 
SpringMVC框架支持多种View视图技术,包括:jstlView、freemarkerView、ThymeleafView等。
 
6、视图View(需要工程师开发)
作用:把数据展现给用户页面。
View是一个接口,实现类支持不同的View技术(jspfreemarkerpdf等)。

原文地址:https://blog.csdn.net/m0_65260253/article/details/131482745

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_46524.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注