Spring
框架的含义:
-
-
·框架就是一些
类和接口的集合
,通过这些类和接口协调来完成一系列的程序实现 - ·框架也是无数开发者在开发过程中积累的宝贵经验,让我们在开发过程中,可以运用优秀开发人员开发时使用的部分开发技巧和思想
-
·框架也可以理解为一种半成品或是一种
开发某种产品的基石
,我们可以借助框架来专心完成我们的业务逻辑,而无需关心某些实现部分的难题
-
·框架就是一些
Spring的简单介绍:
·Spring:
- 属于SSM框架中的一员
- 是轻量级的JavaEE框架
- 解决企业级应用开发的复杂性
-
Spring
有两个核心部分:IOC和AOP
Spring的特点:
- 方便解耦、简化开发
- 方便程序测试
- 方便和其他框架进行整合
- 方便进行事物操作
- 降低API开发难度
IOC
容器
-
-
IOC
容器的含义:
控制反转
,把对象的创建和对象的调用过程交给Spring进行管理
-
IOC
容器实现的两种方法:
-
- BeanFactory:IOC容器中最基本实现方式,是Spring内部使用的接口
- ApplicationContext:BeanFactory接口的子类接口,提供更多强大的功能
Spring来实现IOC容器,默认也是通过ApplicationContext来完成。理由:
- ApplicationContext功能更加强大。
- BeanFactory是一个相较于ApplicationContext是一个更老的接口,如果使用BeanFactory来实现IOC容器,可能导致Spring的兼容性问题。
Bean
的生命周期
Bean的含义:被Spring管理的对象/元素可以被称为Bean
Bean的声明周期:从对象创建到对象销毁的过程
Bean
具体的生命周期过程:
- 通过构造器创建bean实例(无参数构造)
- 为bean的属性设置值和对其他bean的引用(调用set方法)
- 调用dean的初始的方法(需要进行配置)
- bean可以直接使用了(对象获取到了)
- 当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁)
Spring
中的注解
·Spring针对Bean管理中创建对象提供注解,创建bean实例
1.@Component
声明bean的注解,通用的注解方式
2.@Service
声明bean的注解,在业务逻辑层使用(service层)
3.@Controller
声明bean的注解,在表现层使用(controller层)
4.@Repository
声明bean的注解,在数据访问层使用(dao层)
5.@AutoWired
:根据属性类型自动装配
6.@Qualifier
:根据属性名称进行注入
7.@Resource
:可以根据类型注入,可以根据名称注入
8.@Value
:注入普通类型属性
AOP
编程
-
-
AOP编程也称作
面向切面编程
- AOP是Spring框架中的一个重要内容,是函数式编程的一种衍生范型
- AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提升程序的可重用性,提高了开发的效率
- AOP技术可以用于多种场景和业务,例如:日志记录,性能统计,安全控制,事务处理,异常处理等等
-
AOP编程也称作
AOP
中的术语
- 连接点:可以被增强的方法
- 切入点:真正被增强的方法
- 通知(也可称为增强):实际增强的逻辑部分被称为通知
- 切面:将通知植入切入点的这个过程被称为切面
通知分为多种类型:
-
- 前置通知:在执行真正方法前,去执行的操作
- 后置通知:在执行真正方法后,去执行的操作
- 环绕通知:将阵阵执行的方法环绕起来进行操作
- 异常通知:当执行方法遇到异常时所执行的操作
- 最终通知:最终(最后)才会执行的操作
AspectJ
技术
-
- Spring框架一般基于AspectJ实现AOP操作
- AspectJ不是Spring组成部分,独立AOP框架,一般把AspectJ和Spring框架一起使用,进行AOP操作
- 有多个增强类同一个方法进行增强,设置增强类优先级,在增强类上面添加注解@Order(数字),数字类值越小优先级越高
AspectJ实现切面编程的示例:
MyBatis
和SpringMVC
MyBatis
简介
-
-
MyBatis是一款优秀的
持久层
框架,它属于SSM框架的一部分 - 持久化的含义就是将程序数据在持久状态和瞬时状态间转换的机制。例如:磁盘中的数据和内存中的对象
- 持久化存在的意义是什么?基于电脑内存的特点,计算机需要将一些重要的资源进行存储。但内存暂时无法满足这个特点。所以提出了持久化的概念,将需要存储的数据放置在硬盘或外部存储设备
- 持久层在代码中具体可以提现为对应的dao层(Data Access Object)
- Dao层主要是与数据的存取有关
- 层的概念:系统架构中,应该有一个相对独立的逻辑层面,专注于数据持久化逻辑的实现。与系统其他部分相对而言,这个层面应该具有一个较为清晰和严格的逻辑边界
- 持久层完成相关业务,一般都与关系数据库又一定的联系
-
MyBatis是一款优秀的
#
号和$符号在dao层的xml的区别是什么?
-
- #号可以称为预处理符号 (prepare statement),#号可以有效的防止SQL注入问题
- $符号可以称为拼接符,不经过处理,直接将参数拼接在SQL语句中
MyBatis
的作用和特点
-
- MyBatis就是帮助开发者将数据存入数据库中,和从数据库中取数据
- 简单易学:本身就小且简单。没有任何第三方依赖
- 灵活:不会对现有设计加强任何逻辑和后续影响
- 降低sql与程序代码的耦合:通过提供dao层,将业务逻辑和数据访问逻辑分离
- 提高可维护性。提供xml标签,支持编写动态sql
MyBatis
的工作图示
MyBatis
的工作图示解析
-
- MyBatis-config.xml:MyBatis的配置文件
- sqlSessionFactoryBuilder:sqlSessionFactory的构建者
- sqlSessionFactory:sqlSession的工厂
- sqlSession:当有需要时,创建一个sqlSession,属于门面接口
- Execute:sqlSession下的具体对象
SpringMVC
简介
-
- SpringMVC属于SSM框架的一部分,它和Spring,MyBatis一起组成了经典的SSM框架
- 一种基于Java实现了Web MVC设计模式的请求驱动类型的轻量级Web框架
- 使用了MVC架构模式的思想,将web层进行职责解耦
- 基于请求驱动指的是使用请求-响应模式
- 帮助我们简化开发,也简化我们日常web开发
-
MVC:model view control (含义:
模型和视图之间的转换
)
SpringMVC工作图示
SpringMVC工作图示步骤解析
- 用户发出请求至前端控制器DispatcherServlet
- DispatcherServlet收到请求调用HandlerMapping处理器映射器
- 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果 有则生成)一并返回给DispatcherServlet
- DispatcherServlet调用HandlerAdapter处理器适配器
- HandlerAdapter经过适配器调用具体的处理器(Controller,也叫后端控制器)
- Controller执行完成返回ModelAndView
- HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewReslover试图解析器
- ViewReslover解析后返回具体View
- DispatcherServlet响应用户
SpringMVC的相关组件
-
前端控制器DispatcherServle
t:用户请求到达前端控制器,他就相当于MVC模式中的C,
DispatcherServlet
时整个流程控制中心
,由它调用其他组件处理用户的请求,DispatcherServlet的存在降低了组件之间的耦合性 -
处理器映射HandlerMapping:
负责根据用户请求找到Hander即处理器
,SpringMVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等 -
处理器适配器HandlerAdapter:通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,
通过扩展适配器可以对更多类型的处理器进行处理
-
处理器Handler
:他就是我们开发中要编写的具体业务控制器。由DispatcherServlet把用户请求转发到Handler。
由Handler对具体的用户请求进行处理
-
视图解析器View Resolver:
负责将处理结果生成View视图
,View Resolver首先根据逻辑视图名解析成物理视图名,即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户 -
视图View:SpringMVC框架提供了很多的View视图类型的支持。需要通过页面技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的
页面
请求过程中涉及到的部分注解解析
-
- @RequestMapping用于建立请求URL和处理请求方法之间的对应关系
- @RequestMapping如果放置在类上,请求URL的第一级访问目录
- @RequestMapping如果放置在方法上,请求URL的第二级访问目录,如果类上也存在@RequestMapping,就会和方法中@RequestMapping的路径进行合并后再请求合并后的路径
- @RequestParam、@Requestbody、@PathVariable都是用于对请求参数的处理
SpringMVC的数据响应方式
-
页面跳转:
- 直接返回字符串
- 通过ModelAndView对象返回
-
回写数据:
- 直接返回字符串
- 返回对象或集合
SpringBoot
简介
-
- SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework同属于spring的产品
-
SpringBoot称为搭建程序的脚手架。其最主要的作用就是
帮我们快速搭建庞大的spring项目,并且尽可能的减少一切xml配置
,做到开箱即用,迅速上手,这样我们就可以简单的开始,多数SpringBoot应用只需要很少的Spring配置
SpringBoot
的特点
-
- 为所有Spring的开发者提供一个非常快速的、广泛接受的入门体验
-
提供了许多技术默认的标准配置
,减轻了开发者对于程序编写的成本,让开发者能够
投入更多精力在逻辑编写而非各种配置
- SpringBoot框架逐渐成为了开发标准技术,使用SpringBoot的企业和开发人员越来越多,几乎成为java项目的必备技术栈
Springboot所特有的启动项
@SpringBootApplication
public class 类名{
public static void main(String[] args){
SpringApplication.run(类名.class,args);
}
}
Springboot需要在pom中进行声明
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.7</version>
<relativePath/> <!– lookup parent from repository –>
</parent>
主程序入口
-
- 在学习SpringBoot之前,主程序的主要作用是:将需要调用的方法写在主程序入口中,等待启动
- 执行完主方法中的逻辑后,会主动关掉(exit 0)
- 在学习SpringBoot之后,主程序的另一个作用是:开启当前的SpringBoot项目,并且一直等待请求,需要手动的关闭它
Maven
的简介
-
-
Maven的本质是一个
项目管理工具
,将项目开发和管理过程抽象成一个项目对象模型(POM)。开发人员只需做一些简单的配置,就可以批量完成形目的构建、报告和文档的生成工作 -
Maven可以
帮助开发人员管理项目需要的各种依赖
。无需开发人员去动手的引入各种jar包
-
Maven的本质是一个
Maven仓库的概念
-
- 仓库指的是一个位置
- Maven仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库
- Maven仓库分为三种:本地仓库、中央仓库、远端仓库
- Maven的本地仓库是在本机的某个路径下创建一个仓库来存放项目所需要的依赖(jar包)
- Maven中央仓库是由Maven社区提供的仓库,其中包含了大量常用的库
- Maven远端仓库是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的jar文件
Maven
仓库可以考虑改为国内地址,提升访问速度
<mirrors>
<!– mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
–>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
Maven
有什么用?
-
- 在开发java项目时,往往需要引用大量的第三方依赖(jar包),如果手动的去一次添加,会非常耗时,并且可能存在许多问题,比如jar包的兼容性问题,jar包引入失败等等问题
- 如果使用maven类似的项目管理工具,开发人员则无需太多关心项目的依赖问题,只需要声明项目依赖信息,其他步骤交给maven来完成即可。这样就可以提高开发效率,减少依赖步骤产生的大量问题。
- Mawen对于项目的核心逻辑没有任何侵入,开发人员可以放心使用maven来作为项目jar包的管理工具
Maven依赖搜索顺序
- 在本地仓库中搜索
- 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤4,如果找到了则下载到本地仓库中以备将来引用
- 如果没有设置远程仓库,Maven将停止处理并抛出无法找到依赖的错误
- 如果存在远程仓库,则会在远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,将停止处理并抛出无法找到依赖的错误
开发Java项目所需要的基础知识
-
- Java项目分为前端部分和后端部分。原因:前后端彼此工作职责不同,并且工作重心也不同,前后端的目的是相同的
- 后端技术栈:Java、数据库、框架、网络编程、设计模式、Java周边技术栈、(额外的知识:linus系统,es搜索引擎,netty,docker,k8s,springsecurity)
- 前端技术栈:HTML、CSS、JS、VUE|JQ、ElementUI、echars
- 全栈开发:前端+后端
-
-
开发项目时,
需求
永远是第一位。也就是说开发功能前,一定要确定自己已经理解对应的需求
-
开发项目时,
使用SpringBoot进行开发的步骤
创建一个SpringBoot项目
选择需要引入的依赖(技术)
最开始的项目结构
SpringBoot的启动项需要和各个层(controller、service等)处于一个层级
此次实现的简单逻辑
启动成功的普遍标志
测试请求接口的路径
@ResponseBody
-
- @ResponseBody含义:返回的结果转换为json格式
- Json格式:请求和响应的一种正式/规范的数据结构
-
- @Controller可以和@ResponseBody结合产生一个新的注解:@RestController
- @RestController含义:包括了了@Controller和ResponseBody的作用
-
- @ResponseBody和@RestController在使用的时候如如何选择呢?
- @ResponseBody仅仅是修饰某个方法,而@RestController是修饰当前控制器下的所有方法
Xml
文件讲解:
-
- 类似<project></project>标签成对使用,表示某一区域内都属于某个标签的作用域。
- <dependencies></dependencies>作用域表示的是项目所需要的依赖。
- <dependency></dependency>表示一个需要引入的具体依赖信息。
- <plugins></plugins>作用域表示的是项目所需要的插件。
- <plugin></plugin>表示一个需要引入的具体插件信息。