Java 框架学习
Java 框架学习
Xzzz2020
个人博客地址:https://xzzz2020.gitee.io/,可以收藏一下,会第一时间发布文章
展开
-
【总结】SpringMVC源码分析
文章目录一、配置文件分析1. XML配置分析2. MVC配置二、入口方法分析1. 容器初始化2. 解析Controller3. Spring对注解的配置支持三、SpringMVC的核心流程1. 关键流程2. 核心组件一、配置文件分析1. XML配置分析在一个SSM项目中,需要在xml文件配置SpingMVC的相关组件DispatcherServlet:做请求分发以及结果渲染ContextLoaderListener:配置监听器,在创建Servlet前,加载SpringMVC的配置<?x原创 2020-09-10 20:18:24 · 347 阅读 · 0 评论 -
【总结】SpringIOC源码分析
文章目录一、简介二、IOC容器1. 简单容器接口BeanFactory2. ListableBeanFactory接口3. AutowireCapableBeanFactory接口4. DefaultListableBeanFactory类5. 高级容器接口ApplicationContext6. ConfigurableApplicationContext接口7. AbstractApplicationContext三、容器初始化1. 后置处理器post processor2. Aware接口3. 事件监原创 2020-09-10 20:16:54 · 558 阅读 · 0 评论 -
【总结】SpringAOP源码分析
文章目录一、SpringAOP的总体流程二、为什么在启动类加上@EnableAspectJAutoProxy就能支持AOP三、如何注册解析AOP的服务?四、横切逻辑加载分析1. TargetSource接口2. buildAspectJAdvisors方法五、横切逻辑织入1. 横切逻辑的织入方法提供的有两个2. 流程一、SpringAOP的总体流程注册解析AOP的服务解析和加载横切逻辑将横切逻辑织入目标Bean中二、为什么在启动类加上@EnableAspectJAutoProxy就能支持AOP原创 2020-09-10 20:15:06 · 280 阅读 · 0 评论 -
【总结】自定义SpringMVC
文章目录一、简介1. SpringMVC的引出2. 自定义MVC提供的功能二、建立请求转发器1. 请求的拦截2. 责任链处理请求三、请求处理器1. 请求预处理器2. 静态资源处理器3. JSP处理器四、Controller处理器1. 相关注解和配置类2. ControllerRequestProcessor3. 建立Controller方法与请求的映射关系4. 给需要执行的方法参数赋值5. 利用反射执行获取执行的结果6. 根据结果设置结果渲染器五、处理结果渲染器1. 默认结果渲染器2. 异常结果渲染器3.原创 2020-09-10 20:14:11 · 581 阅读 · 0 评论 -
【总结】自定义SpringIOC
文章目录一、手写SpringIOC容器简介二、创建注解三、提取标记对象1. 指定范围加载四、实现IOC容器1. 枚举的单例2. 保存Class对象及其实例的载体3. 容器加载4. 容器的操作(增删改查)五、依赖注入1. 依赖注入的注解2. 对有注解的属性进行依赖注入一、手写SpringIOC容器简介已经实现的功能有:提供注解@Service、@Component、@Controller、@Repositor,标记需要加载到IOC容器管理的类提供了一个ClassUtil工具类,支持加载指定包下及其子原创 2020-09-10 20:12:33 · 383 阅读 · 1 评论 -
【总结】自定义SpringAOP
文章目录一、简介1. AOP的引出2. 自研AOP提供的功能3. AOP的核心概念:4. Advice的种类:5. 切面执行顺序6. Introduction--引入型Advice7. JDK动态代理8. CGLIb动态代理9. SpringAOP的底层机制二、利用CGLib实现AOP逻辑1. 完成注解的创建2. 切面模板类3. 被代理类的织入实现4. 执行容器的AOP操作三、引入AspectJ框架1. AspectJ框架简介2. 环境配置3. 解析Aspect表达式并定位被织入目标一、简介1. AOP原创 2020-09-10 20:11:00 · 511 阅读 · 0 评论 -
SpringCloud--简介
目录1.系统架构演变1.1. 集中式架构1.2.垂直拆分1.3.分布式服务1.4.服务治理(SOA)1.5.微服务2.1.认识RPC2.2.认识Http2.3.如何选择?3.Http客户端工具3.3.Spring的RestTemplate4.初始SpringCloud4.1.简介4.2.版本5.微服务场景模拟5.1.服务提供者5.1.1.Spring脚手架创建工程1.系统架构演变随着互联网的发...原创 2020-03-26 18:31:01 · 990 阅读 · 0 评论 -
SpringMVC 中的拦截器
拦截器的作用Spring MVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。用户可以自己定义一些拦截器来实现特定的功能。谈到拦截器,还要向大家提一个词——拦截器链(Interceptor Chain)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。说到这里,...原创 2020-03-19 21:20:43 · 152 阅读 · 0 评论 -
SpringMVC 中的异常处理
异常处理的思路系统中异常包括两类:预期异常和运行时异常 RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。系统的 dao、 service、 controller 出现都通过 throws Exception 向上抛出,最后由 springmvc 前端控制器交由异常处理器进行异常处理,如下图:实现步骤编写异常类...原创 2020-03-19 21:05:45 · 123 阅读 · 0 评论 -
SpringMVC 实现文件上传
文件上传的回顾文件上传的必要前提A form 表单的 enctype 取值必须是: multipart/form-data(默认值是:application/x-www-form-urlencoded) enctype:是表单请求正文的类型B method 属性取值必须是 PostC 提供一个文件选择域文件上传的原理分析当 form 表单的 enctype 取值不是默认值后, re...原创 2020-03-19 21:00:27 · 242 阅读 · 0 评论 -
SpringMVC--响应数据和结果视图
返回值分类字符串controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。//指定逻辑视图名,经过视图解析器解析为 jsp 物理路径: /WEB-INF/pages/success.jsp@RequestMapping("/testReturnString")public String testReturnString() { System.out...原创 2020-03-19 20:49:18 · 252 阅读 · 0 评论 -
SpringMVC--常用注解
RequestParam使用说明作用:把请求中指定名称的参数给控制器中的形参赋值。属性:value: 请求参数中的名称。required:请求参数中是否必须提供此参数。 默认值: true。表示必须提供,如果不提供将报错使用示例jsp 中的代码:<!-- requestParams 注解的使用 --><a href="springmvc/useReques...原创 2020-03-19 20:33:08 · 169 阅读 · 0 评论 -
SpringBoot与整合其他技术
SpringBoot整合Mybatis添加Mybatis的起步依赖<!--mybatis起步依赖--><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifact...原创 2020-03-18 21:34:40 · 388 阅读 · 0 评论 -
SpringBoot的配置文件
SpringBoot配置文件类型SpringBoot配置文件类型和作用SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。SpringBoot默认会从Resources目录下加载application.proper...原创 2020-03-18 20:30:54 · 171 阅读 · 0 评论 -
SpringBoot原理分析
起步依赖原理分析分析spring-boot-starter-parent按住Ctrl点击pom.xml中的spring-boot-starter-parent,跳转到了spring-boot-starter-parent的pom.xml,xml配置如下(只摘抄了部分重点配置):<parent> <groupId>org.springframework.boot&l...原创 2020-03-18 18:36:52 · 159 阅读 · 0 评论 -
SpringBoot快速入门
SpringBoot快速入门代码实现创建Maven工程使用idea工具创建一个maven工程,该工程为普通的java工程即可添加SpringBoot的起步依赖SpringBoot要求,项目要继承SpringBoot的起步依赖spring-boot-starter-parent<parent> <groupId>org.springframework.bo...原创 2020-03-18 18:02:06 · 148 阅读 · 0 评论 -
请求参数的绑定
绑定说明绑定的机制我们都知道,表单中请求参数都是基于 key=value 的。SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的。例如:<a href="account/findAccount?accountId=10">查询账户</a>请求参数是:accountId=10/** * 查询账户 * @retur...原创 2020-03-17 21:41:52 · 170 阅读 · 0 评论 -
SpringMVC 的入门
SpringMVC 的入门案例创建WEB工程,引入开发的jar包具体的坐标如下:<!-- 版本锁定 --><properties> <spring.version>5.0.2.RELEASE</spring.version></properties><dependencies> <dependency&g...原创 2020-03-17 20:37:57 · 243 阅读 · 0 评论 -
SpringMVC -- 三层架构和MVC
三层架构开发服务器端程序,一般都基于两种形式,一种C/S架构程序,一种B/S架构程序使用Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构三层架构1. 表现层:WEB层,用来和客户端进行数据交互的。表现层一般会采用MVC的设计模型我们常说的web层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web 层, web 需要接收 http 请求,...原创 2020-03-17 19:06:38 · 2514 阅读 · 0 评论 -
Spring Boot简介
1. 原有Spring优缺点分析Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。...原创 2020-03-17 18:24:18 · 133 阅读 · 1 评论 -
Spring 中的事务控制
Spring 中事务控制的 API 介绍PlatformTransactionManager此接口是 spring 的事务管理器,它里面提供了我们常用的操作事务的方法,如下图:真正管理事务的对象org.springframework.jdbc.datasource.DataSourceTransactionManager 使用 Spring---------JDBC 或 iBatis 进...原创 2020-03-15 21:22:42 · 343 阅读 · 0 评论 -
Spring 中的 AOP
Spring 中 AOP 的细节AOP 相关术语Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点。Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义。Advice(通知/增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知。通知...原创 2020-03-14 21:11:23 · 195 阅读 · 0 评论 -
AOP 的相关概念
AOP 概述什么是 AOPAOP: 全称是 Aspect Oriented Programming 即: 面向切面编程。简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强。AOP 的作用及优势作用:在程序运行期间,不修改源码对已有方法进行增强。优势:减少重复代码提高开发效率维护方便动态代理回顾...原创 2020-03-14 20:43:05 · 245 阅读 · 0 评论 -
Spring 整合 Junit
测试类中的问题和解决思路问题在测试类中,每个测试方法都有以下两行代码:ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");IAccountService as = ac.getBean("accountService",IAccountService.class);这两行代码的作用是获取容器,如果...原创 2020-03-12 21:42:34 · 140 阅读 · 0 评论 -
Spring -- 基于注解的 IOC 配置
基于注解的 IOC 配置学习基于注解的 IoC 配置,大家脑海里首先得有一个认知,即注解配置和 xml 配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。关于实际的开发中到底使用xml还是注解,每家公司有着不同的使用习惯。所以这两种配置方式我们都需要掌握。环境搭建–使用@Component 注解配置管理的资源@Component("accountService") ...原创 2020-03-12 21:30:03 · 120 阅读 · 0 评论 -
案例:使用 spring 的 IoC 的实现账户的 CRUD
创建数据库和编写实体类create table account(id int primary key auto_increment,name varchar(40),money float)character set utf8 collate utf8_general_ci;insert into account(name,money) values('aaa',1000);inse...原创 2020-03-11 21:36:43 · 229 阅读 · 0 评论 -
spring---IOC解决程序耦合
使用spring的IOC 解决程序耦合特别说明:spring5 版本是用 jdk8 编写的,所以要求我们的 jdk 版本是 8 及以上。同时 tomcat 的版本要求 8.5 及以上。创建业务层接口和实现类public interface IAccountService { /** * 保存账户(此处只是模拟,并不是真的要保存) */...原创 2020-03-11 21:16:25 · 183 阅读 · 0 评论 -
Spring---IoC的概念和作用
程序的耦合和解耦耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。 耦合性存在于各个领域,而非软件设计中独有的,但是我们只讨论软件工程中的耦合...原创 2020-03-03 20:48:04 · 210 阅读 · 0 评论 -
Spring---概述
spring 是什么Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IOC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 SpringMVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第...原创 2020-03-03 20:30:50 · 162 阅读 · 0 评论 -
Mybatis------注解开发
Mybatis 注解开发Mybatis 也可以使用注解开发方式,这样我们就可以减少编写 Mapper 映射文件了。mybatis 的常用注解说明@Insert: 实现新增@Update: 实现更新@Delete: 实现删除@Select: 实现查询@Result: 实现结果集封装@Results: 可以与@Result 一起使用,封装多个结果集@ResultMap: 实现引用...原创 2020-02-29 21:50:35 · 312 阅读 · 1 评论 -
Mybatis----缓存
Mybatis 缓存像大多数的持久化框架一样, Mybatis 也提供了缓存策略,通过缓存策略来减少数据库的查询次数, 从而提高性能。Mybatis 中缓存分为一级缓存,二级缓存。什么是缓存: 存在于内存中的临时数据。什么样的数据能使用缓存,什么样的数据不能使用适用于缓存:经常查询并且不经常改变的。数据的正确与否对最终结果影响不大的。不适用于缓存:经常改变的数据数据的...原创 2020-02-29 21:29:06 · 153 阅读 · 0 评论 -
Mybatis-----延迟加载策略
Mybatis 延迟加载策略实际开发过程中很多时候我们并不需要总是在加载用户信息时就一定要加载他的账户信息。 此时就是我们所说的延迟加载。何为延迟加载?延迟加载:就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称懒加载.好处:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。坏处:因为只有当需要用到数据时,...原创 2020-02-29 21:17:57 · 211 阅读 · 0 评论 -
Mybatis -------多表查询之多对多
实现 Role 到 User 多对多用户与角色的关系模型用户与角色的多对多关系模型如下:角色表用户角色中间表业务要求及实现 SQL需求:实现查询所有对象并且加载它所分配的用户信息。分析:查询角色我们需要用到Role表,但角色分配的用户的信息我们并不能直接找到用户信息,而是要通过中间表(USER_ROLE 表)才能关联到用户信息。下面是实现的 SQL 语句:SELECTr.*...原创 2020-02-27 22:00:11 · 177 阅读 · 0 评论 -
Mybatis-----多表查询之一对多
Mybatis 多表查询之一对多本次主要以最为简单的用户和账户的模型来分析 Mybatis 多表关系。用户为 User 表,账户为Account表。一个用户(User)可以有多个账户(Account)。具体关系如下:一对一查询(多对一)需求:查询所有账户信息,关联查询下单用户信息。注意:因为一个账户信息只能供某个用户使用,所以从查询账户信息出发关联查询用户信息为一对一查询。如果从...原创 2020-02-27 21:49:31 · 262 阅读 · 0 评论 -
Mybatis---------动态 SQL 语句
Mybatis 的映射文件中,前面我们的 SQL 都是比较简单的,有些时候业务逻辑复杂时,我们的 SQL 是动态变化的,此时在前面的学习中我们的 SQL 就不能满足要求了。参考的官方文档,描述如下:动态 SQL 之标签持久层 Dao 接口/*** 根据用户信息,查询用户列表* @param user* @return*/List<User> findByUser(Us...原创 2020-02-27 21:15:17 · 302 阅读 · 0 评论 -
Mybatis-------连接池与事务深入
Mybatis 的连接池技术我们在 WEB 课程中也学习过类似的连接池技术,而在 Mybatis 中也有连接池技术,但是它采用的是自己的连接池技术。在 Mybatis 的 SqlMapConfig.xml 配置文件中, 通过<dataSource type=”pooled”>来实现 Mybatis 中连接池的配置。Mybatis 连接池的分类在 Mybatis 中我们将它的数据源...原创 2020-02-27 21:03:58 · 169 阅读 · 0 评论 -
mybatis ------ SqlMapConfig.xml配置文件
配置内容SqlMapConfig.xml 中配置的内容和顺序-properties(属性)–property-settings(全局配置参数)–setting-typeAliases(类型别名)–typeAliase–package-typeHandlers(类型处理器)-objectFactory(对象工厂)-plugins(插件)...原创 2020-02-26 10:58:37 · 143 阅读 · 0 评论 -
Mybatis --------输出结果封装
resultType 配置结果类型resultType 属性可以指定结果集的类型,它支持基本类型和实体类类型。需要注意的是,它和 parameterType 一样,如果注册过类型别名的,可以直接使用别名。没有注册过的必须使用全限定类名。例如:我们的实体类此时必须是全限定类名。 同时,当是实体类名称是,还有一个要求,实体类中的属性名称必须和查询语句中的列名保持一致,否则无法实现封装基本类型示...原创 2020-02-26 10:43:14 · 166 阅读 · 0 评论 -
Mybatis--------参数深入
parameterType 配置参数注意事项基 本 类 型 和 String 我 们 可 以 直 接 写 类 型 名 称 , 也 可 以 使 用 包 名 . 类 名 的 方 式 , 例 如 :java.lang.String。实体类类型,目前我们只能使用全限定类名。究其原因,是 mybaits 在加载时已经把常用的数据类型注册了别名,从而我们在使用时可以不写包名,而我们的是实体类并没有注册别...原创 2020-02-26 10:24:54 · 113 阅读 · 0 评论 -
mybatis------Sqlsesssion代理过程实现原理源码
Sqlsesssion:代理原理 @Before//用于在测试方法执行之前执行 public void init() throws Exception { //1.读取配置文件 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建SqlSessionFactory工厂...原创 2020-02-26 09:44:35 · 137 阅读 · 0 评论