Spring七大组件

news2024/11/24 12:00:21

一、Spring七大组件image-20200821075431512

1.核心容器(Spring core)

    Spring-core相当于一个创建并管理bean的容器:

  • 创建:底层使用反射技术创建bean的实例;
  • 管理:容器中的每个bean,spring容器默认按照单例模式管理;
  • 设计:使用工厂设计模式(BeanFactory)。

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

2.Spring上下文(Spring context)

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

2.1 spring context 包括什么?

主要包括:

  • DefaultListableBeanFactory
    这就是大家常说的 ioc 容器,它里面有很多 map、list。spring 帮我们创建的 singleton 类型的 bean 就存放在其中一个 map 中。我们定义的监听器(ApplicationListener)也被放到一个 Set 集合中。
  • BeanDefinitionRegistry
    把一个 BeanDefinition 放到 beanDefinitionMap。
  • AnnotatedBeanDefinitionReader
    针对 AnnotationConfigApplicationContext 而言。一个 BeanDefinition 读取器。
  • 扩展点集合
    存放 spring 扩展点(主要是 BeanFactoryPostProcessor、BeanPostProcessor)接口的 list 集合。

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则无需特定的编译器处理。

    InvocationHandler 的 invoke(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的内容

  • Spring对多个持久化技术提供了集成支持,包括 Hibernate、 MyBatis、JPA、JDO;
  • Spring提供一个简化JDBC API操作的Spring JDBC框架;
  • Spring面向DAO制定了一个通用的异常体系,屏蔽具体持久化技术的异常,使业务层和具体的持久化技术实现解耦;
  • Spring提供了模板类简化各种持久化技术的使用。

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开发在接收请求参数,数据共享,页面跳转等操作相对比较复杂。servlet是java进行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技术(jsp、freemarker、pdf等)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/723304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0501逻辑存储结构和架构-InnoDB引擎-MySQL-数据库

文章目录 1 逻辑结构1.1 表空间1.2 段1.3 区1.4 页1.5 行 2 架构2.1 内存架构2.1.1 Buffer Pool2.1.2 change bufer2.1.3 自适应哈希2.1.4 log buffer 2.2 磁盘架构2.2.1 System Tablespace2.2.2 File-Per-Table Tablespace2.2.3 General Tablespaces2.2.4 Undo Tablespaces2.2…

NC30 缺失的第一个正整数

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** param nums int整型一维数组* return int整型*/public int minNumberDisappeared (int[] nums) {// write code hereHashM…

CCF-CSP真题《202303-3 LDAP》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号:202303-3试题名称:LDAP时间限制:12.0s内存限制:1.0GB问题描述: 题目背景 西西艾弗岛运营公司是一家负责维护和运营岛上基础设…

Android Studio实现内容丰富的安卓电影购票系统

如需源码可以添加q-------3290510686,也有演示视频演示具体功能,源码不免费,尊重创作,尊重劳动。 项目编号043 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看电影列表…

datagrip 无法断句

使用datagrip 的时候出现了几个sql 执行会无法断开语句的情况可以在这里设置: When caret outside statement execute:

PADS Layout软件中焊盘各层的释义是什么呢

对于PADS软件而言,焊盘的组成由下面几种组成。 焊盘:包括规则焊盘以及通孔焊盘。 热焊盘:热风盘,也叫花焊盘,在负片中有效,设计用于在负片中焊盘与敷铜的接连方式,防止焊接时散热太快&#xf…

Windows远程连接linux中mysql数据库

我没有mysql并且没有把mysql配置到环境变量中,所以现在我要下载mysql 一.下载mysql Mysql官网下载地址:https://downloads.mysql.com/archives/installer 二.安装mysql 1. 选择设置类型 双击运行mysql-installer-community-8.0.26.msi,这…

网络安全 | 商用密码产品介绍

关注wx: CodingTechWork 密码产品概述 密码 使用特定变换对数据等信息进行加密保护、安全认证的技术、产品和服务。 密码技术 实现密码的加密保护和安全认证等功能的技术,主要包含密码算法、密钥管理和密码协议等。 密码划分 核心密码普通密码商用…

ai绘画图片网站哪个好?这几个好用的ai绘画图片网站分享给你

近期我的朋友公司给它安排了一项艰巨的任务,公司给了他一堆图片,然后要求他根据这些图片生成一些风格类似却又独具特色的优质图片,这可难倒他了,他在机缘巧合的情况下得知了有ai绘画图片生成图片的技术,但它不知道怎么…

Rust 第三天---内存管理与所有权

前面介绍了环境配置以及基础语法,掌握之后已经可以开始用Rust编写一些简单的程序了,今天就要来介绍一下Rust核心的功能—内存管理与所有权 1. 关于内存管理 无论什么高级语言必须考虑到的一点就是编写程序时对于内存的管理问题,更简单一点解释,利用编程语言能快速高效的分配内…

C语言究竟是一门怎样的语言?

对于大部分程序员,C语言是学习编程的第一门语言,很少有不了解C的程序员。 C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是如何交互的&#xf…

40、使用elementUI分别实现前端,后端表格分页

说明&#xff1a;前端单独做的表格分页—用于解决数据过多页面渲染压力&#xff0c;如果是服务器响应数据过慢&#xff0c;使用第二种分页方法–后端分页。以下为分页效果 一、前端分页 1、创建表格 <el-table:key"new Date().getTime()":data"tableData.s…

Linux samba服务器配置教程

此教程适用于Centos 和 Ubuntu&#xff0c;其它Linux系统一般大概率配置命令相同&#xff01; 一、关闭防火墙 1. Centos 查看防火墙状态&#xff1a;systemctl status firewalld.service 关闭防火墙&#xff1a;systemctl stop firewalld.service 永久关闭防火墙&#xff…

Node中npm基本使用

1.创建文件夹 说明&#xff1a;创建一个空文件夹&#xff0c;然后以此目录为工作目录&#xff0c;执行npm init,交互式创建package.json文件(包的配置文件) npm init 注意&#xff1a;package下的name属性不能使用中文&#xff0c;大写&#xff0c;默认值为文件名的名称&…

eNSP-ACL分类

ACL分类 文章目录 ACL分类一、题目要求二、题目分析三、拓扑结构四、基本配置五、测试验证 一、题目要求 1 、 client1能够 ping通server&#xff0c;但是不能telnet 2 、 client2能够 telnet, 但是不能 ping 通server 3 、 使用一张 ACL列表 二、题目分析 使用高级ACL在AR3的…

商用车自动驾驶线控底盘测试报告

一&#xff0e;概述 商用车线控底盘主要用于接收控制指令&#xff0c;完成相应的驱动、档位、制动、转向、声光等动作&#xff0c;从而实现自动驾驶功能。 底盘线控系统测试目的是对驾驶模式&#xff08;Drive Mode&#xff09;、油门&#xff08;Throttle&#xff09;、档位&a…

window10环境下安装pycocotools报错及解决办法

相信大家入门安装相关深度学习项目时可能会遇到相关pycocotools&#xff0c;或者ninja的相关报错&#xff0c;下面图是网上拿的&#xff0c;真实报错我忘了截图&#xff0c;但是报错信息如果提到安装Microsoft Visual Tolls&#xff0c;大概率这个可行。 在网上找了很多推荐的…

Kubernetes(k8s)超详细的安装步骤

目录 一、环境设置 二、基本环境配置 &#xff08;一&#xff09;主机名配置 1、在master虚拟机上操作 2、在node1r虚拟机上操作 3、在node2虚拟机上操作 &#xff08;二&#xff09;VMware网络配置 &#xff08;三&#xff09;虚拟机网络配置 1、在master虚拟机上操作…

关于微服务治理的一些理解

关于微服务治理的一些理解 微服务架构存在的意义 根本意义 其主要目的还是为了解耦&#xff0c;提高灵活性和可扩展性&#xff01; 参考&#xff1a;https://zhuanlan.zhihu.com/p/462078779 相比单体 单体架构的性能高于微服务架构&#xff0c;微服务的负载能力低于单体架构…

『MySQL快速上手』Centos 7安装MySQL详解

文章目录 1.卸载掉之前安装的MySQL2.检查系统安装包3.卸载默认安装包4.获取mysql官方yum源5.安装mysql yum源6.安装mysql服务7.查看配置⽂件和数据存储位置8.启动mysql服务9.登录mysql方法一 使用临时密码方法二 直接登录方法三 设置免密码登录 10.设置开机自动启动&#xff08…