SpringBoot——各功能原理解析
Spring Boot ——各功能原理解析1、Rest使用与原理Rest原理(表单提交要使用REST的时候)
表单提交会带上**_method=PUT**
请求过来被HiddenHttpMethodFilter拦截
请求是否正常,并且是POST
获取到**_method**的值。
兼容以下请求;PUT.DELETE.PATCH
原生request(post),包装模式requesWrapper重写了getMethod方法,返回的是传入的值。
过滤器链放行的时候用wrapper。以后的方法调用getMethod是调用requesWrapper的
Rest使用客户端工具,
如PostMan直接发送Put、delete等方式请求,无需Filter。
12345spring: mvc: hiddenmethod: filter: enabled: true #开启页面表单的Rest功能
2、请求映射原理SpringMVC功能分析都从 org.springframework.web.servlet.Dispatche ...
MyBatis——执行原理解析
MyBatis——执行原理解析
调用SqlSessionFactoryBuilder的build方法,传入配置文件
方法里面会创建一个XmlConfigBuilder文件解析器,将配置文件解析封装为一个Configuration对象,这同时会解析所有的映射xml文件,将insert、select、delete、update等标签解析封装成MappedStatement存入Configuration对象中
之后会调用build方法,传入Configuration对象,创建出一个SqlSessionFactory对象
调用SqlSessionFactory对象的openSession方法
方法内首先会从Configuration对象中获取一些信息创建事务
之后会调用newExecutor方法,根据全局配置中的ExecutorType创建相应的Executor对象(默认是SimpleExecutor),如果开启了二级缓存,则会创建CachingExecutor包装Executor。
然后会执行interceptChain.pluginAll方法,使用每一个拦截器包装Executor对象 ...
Spring核心
一、IOC(概念和原理)1、什么是 IOC(1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理
(2)使用 IOC 目的:为了耦合度降低
2、IOC 底层原理(1)xml 解析、工厂模式、反射
3、IOC(BeanFactory 接口)1、IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂
2、Spring 提供 IOC 容器实现两种方式:(两个接口)
(1)BeanFactory:IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用
加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
(2)ApplicationContext:BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人员进行使用
加载配置文件时候就会把在配置文件对象进行创建
3、ApplicationContext 接口有实现类
4、IOC 操作 Bean 管理4.1 概念
1、什么是 Bean 管理 (Bean 管理指的是两个操作 )
(1)Spring 创建对象
(2)Spirng 注入属性
...
SpringBoot——日志
SpringBoot——日志1、日志框架 小张;开发一个大型系统;
1、System.out.println("");将关键数据打印在控制台;去掉?写在一个文件?
2、框架来记录系统的一些运行时信息;日志框架 ; zhanglogging.jar;
3、高大上的几个功能?异步模式?自动归档?xxxx? zhanglogging-good.jar?
4、将以前框架卸下来?换上新的框架,重新修改之前相关的API;zhanglogging-prefect.jar;
5、JDBC---数据库驱动;
写了一个统一的接口层;日志门面(日志的一个抽象层);logging-abstract.jar;
给项目中导入具体的日志实现就行了;我们之前的日志框架都是实现的抽象层;
市面上的日志框架;
JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j….
日志门面 (日志的抽象层)
日志实现
JCL(Jakarta Commons Loggi ...
SpringBoot--监控
一、监控管理通过引入spring-boot-starter-actuator,可以使用Spring Boot为我们提供的准生产环境下的应用监控和管理功能。我们可以通过HTTP,JMX,SSH协议来进行操作,自动得到审计、健康及指标信息等
步骤:
–引入spring-boot-starter-actuator
–通过http方式访问监控端点
–可进行shutdown(POST 提交,此端点默认关闭)
监控和管理端点
二、定制端点信息– 定制端点一般通过endpoints+端点名+属性名来设置。
– 修改端点id(endpoints.beans.id=mybeans)
– 开启远程应用关闭功能(endpoints.shutdown.enabled=true)
– 关闭端点(endpoints.beans.enabled=false)
– 开启所需端点
•endpoints.enabled=false
•endpoints.beans.enabled=true
– 定制端点访问根路径
•management.context-path=/manage
– 关闭http端点
•man ...
Spring Boot--安全
一、安全Spring Security是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型。他可以实现强大的web安全控制。对于安全控制,我们仅需引入spring-boot-starter-security模块,进行少量的配置,即可实现强大的安全管理。
几个类:
WebSecurityConfigurerAdapter:自定义Security策略
AuthenticationManagerBuilder:自定义认证策略
@EnableWebSecurity:开启WebSecurity模式
应用程序的两个主要区域是“认证”和“授权”(或者访问控制)。这两个主要区域是Spring Security 的两个目标。
•“认证”(Authentication),是建立一个他声明的主体的过程(一个“主体”一般是指用户,设备或一些可以在你的应用程序中执行动作的其他系统)。
•“授权”(Authorization)指确定一个主体是否允许在你的应用程序执行一个动作的过程。为了抵达需要授权的店,主体的身份已经有认证过程建立。
这个概念是通用的而不只在Spring S ...
Spring Boot--任务
一、异步任务在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了**@Async**来完美解决这个问题。
两个注解:
@EnableAysnc、**@Aysnc**
1234567891011121314@Servicepublic class AsyncService { //告诉Spring这是一个异步方法 @Async public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("处理数据中..."); }}
二 ...
Spring Boot--检索
12345678910111213141516/** * SpringBoot默认支持两种技术来和ES交互; * 1、Jest(默认不生效) * 需要导入jest的工具包(io.searchbox.client.JestClient) * 2、SpringData ElasticSearch【ES版本有可能不合适】 * 版本适配说明:https://github.com/spring-projects/spring-data-elasticsearch * 如果版本不适配:2.4.6 * 1)、升级SpringBoot版本 * 2)、安装对应版本的ES * * 1)、Client 节点信息clusterNodes;clusterName * 2)、ElasticsearchTemplate 操作es * 3)、编写一个 ElasticsearchRepository 的子接口来操作ES; * 两种用法:https://github.com/spring-projects/spring-data-ela ...
Spring Boot--消息
1234567891011/** * 自动配置 * 1、RabbitAutoConfiguration * 2、有自动配置了连接工厂ConnectionFactory; * 3、RabbitProperties 封装了 RabbitMQ的配置 * 4、 RabbitTemplate :给RabbitMQ发送和接受消息; * 5、 AmqpAdmin : RabbitMQ系统管理功能组件; * AmqpAdmin:创建和删除 Queue,Exchange,Binding * 6、@EnableRabbit + @RabbitListener 监听消息队列的内容 * */
1234spring.rabbitmq.host=118.24.44.169spring.rabbitmq.username=guestspring.rabbitmq.password=guest#spring.rabbitmq.virtual-host=
一、概述
大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力
消息服务中两个重要概念:
消息代理(me ...
Spring Boot--缓存
123456789101112131415161718192021222324252627282930313233/** * 一、搭建基本环境 * 1、导入数据库文件 创建出department和employee表 * 2、创建javaBean封装数据 * 3、整合MyBatis操作数据库 * 1.配置数据源信息 * 2.使用注解版的MyBatis; * 1)、@MapperScan指定需要扫描的mapper接口所在的包 * 二、快速体验缓存 * 步骤: * 1、开启基于注解的缓存 @EnableCaching * 2、标注缓存注解即可 * @Cacheable * @CacheEvict * @CachePut * 默认使用的是ConcurrentMapCacheManager==ConcurrentMapCache;将数据保存在 ConcurrentMap<Object, Object>中 ...