
Spring
文章平均质量分 79
夹毛局的程序员
这个作者很懒,什么都没留下…
展开
-
SpringAOP原理分析
Spring AOP切面原理核心注解@EnableAspectJAutoProxy@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(AspectJAutoProxyRegistrar.class)public @interface EnableAspectJAutoProxy {核心导入了AspectJAutoProxyRegistrar组件,进一步分析AspectJAutoProxy原创 2022-03-18 12:39:00 · 170 阅读 · 0 评论 -
SpringSecurity简介和基本使用
Spring Security 简介Spring Security 是一个强大的可高度自定义的认证授权安全框架.可以跟Spring无缝结合.环境要求JDK8以上Spring Security Hello World程序引pom文件 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <原创 2021-04-09 11:14:39 · 2279 阅读 · 0 评论 -
SpringBoot整体启动流程分析
逐步分析SpringBoot的整体启动流程入口分析标注@SpringBootApplication的启动类为入口@SpringBootApplicationpublic class SpringMain { public static void main(String[] args) { SpringApplication.run(SpringMain.class, args); }}SpringApplication.run(SpringMain.c原创 2021-02-19 16:36:27 · 178 阅读 · 0 评论 -
SpringBoot自动化配置数据库原理
原生的SpringBoot 的数据库配置在DataSourceAutoConfiguration类中@Configuration(proxyBeanMethods = false)@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })@ConditionalOnMissingBean(type = "io.r2dbc.spi.ConnectionFactory") //非响应式数据源 @EnableConfigura原创 2021-02-08 17:57:24 · 609 阅读 · 0 评论 -
SpringBoot中定制化套路
定制化SpringBoot的常见方式修改配置文件 bootstrap.yml 或者 application.yml 其中的配置项能配什么可以参考每一个starter下的AutoConfiguration文件下绑定的Properties文件自定义配置类 如xxxConfiguration+ @Bean替换带容器中的默认组件,因为默认配置的组件很多都加上了@ConditionalOnMissBean 的注解 当我们自己定义了一个组件之后默认就失效了 如视图解析器Web应用 编写一个配置类实现W原创 2021-02-08 15:33:10 · 339 阅读 · 0 评论 -
SpringMVC嵌入式容器原理分析
嵌入式Servlet容器原理Spring Boot 默认支持的三种Servlet容器 Tomcat(默认) Jetty Undertow Netty切换Servlet容器将tomcat 改成 undertow排除默认的tomcat添加undertow依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-原创 2021-02-08 15:30:24 · 228 阅读 · 0 评论 -
SpringMVC注入原生Servlet组件与DispatcherServlet分析
如何在Spring MVC使用原生Servlet?@ServletComponentScan(basePackages = “com.xxx.xxx”)@WebServlet(urlPatterns = "/my/* ") 不经过Spring MVC的拦截器 需要注意的是跟SpringMVC不同,原生Filter 使用一个型号进行路径匹配 如 /my/*@WebFilter(urlPatterns={"/css/*","/images/*"})@WebListener@ServletCompo原创 2021-02-08 11:19:07 · 499 阅读 · 0 评论 -
SpringMVC异常处理原理
Spring Boot 默认的异常处理规则默认情况下Spring Boot提供/error处理所有错误映射对于非浏览器的客户端请求会返回Json数据,包含错误信息,Http状态码,异常信息,堆栈信息. 对于浏览器客户端会响应一个 whitelabel 默认HTML白页错误视图自定义错误处理自定义错误页 当前项目静态路径 或者 模板引擎查找路径下 创建 error目录,该目录下放入4xx.html 5xx.html 404.html等错误页面 如果使用了模板引擎还可以在页面中获取请求域中的原创 2021-02-07 17:38:23 · 533 阅读 · 0 评论 -
SpringMVC文件上传原理
文件上传原理 入口首先查看MultipartAutoConfiguration类,该类中定义SpringBoot已经帮我们配置好的一系列文件上传相关的操作在该自动配置类中核心配置了StandardServletMultipartResolver 来处理文件上传逻辑,文件上传相关的配置MultipartProperties这个配置类中,对应yaml文件中的spring.servlet.multipart配置项@Configuration(proxyBeanMethods = false)@Conditi原创 2021-02-07 10:49:23 · 389 阅读 · 0 评论 -
SpringMVC拦截器原理
拦截器逻辑核心分析DispatcherServlet的doDispatch 方法执行getHandler方法得到HandlerExecutionChain之后,此时方法执行链中已经包装了所有的拦截器在getHandlerAdapter拿到HandlerAdapter 调用适配器的handler方法之前先调用执行链中的PreHandler按序遍历所有的interceptor的调用preHandler方法,如果一旦有preHandler方法返回false,直接进入triggerAfter原创 2021-02-05 17:59:30 · 271 阅读 · 0 评论 -
SpringMVC默认静态资源加载位置
先说结论Spring Boot 2.3.5 位置在一下这几个目录下classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public/分析源码首先来到SpringMVC自动装配文件WebMvcAutoConfiguration分析里面WebMvcAutoConfigurationAdapter里面的配置@Overridepublic void addResourceHandlers(原创 2021-02-05 15:50:34 · 627 阅读 · 0 评论 -
SpringMVC视图渲染原理
经过DispatcherServlet中的HandlerExecutionChain中的hanlder方法调用目标方法完成,返回了ModelAndView对象之后,下面进入视图渲染逻辑processDispatchResult进一步分析processDispatchResult方法首先判断是否有异常 如果有异常调用异常处理器逻辑 下篇详细分析异常处理源码判断ModelAndView是否为空 如果为空则如果没有视图对象比如返回类型为application/json直接倒序触发所有拦截器原创 2021-02-05 11:42:53 · 961 阅读 · 1 评论 -
SpringMVC内容协商与MessageConverter原理
紧接上篇的SpringMVC执行流程,到最后一个writeWithMessageConverters细节,该方法里面封装了SpringMVC如何处理响应请求,内容协商,HttpMessageConverter的内部细节.逐步分析可以掌握SpringMVC是如何知道浏览器想要什么格式的请求(json/xml或自定义的协议),底层如何将响应写出分析之前需要先了解HandlerMethodReturnValueHandler接口public interface HandlerMethodReturnValue原创 2021-02-04 17:36:09 · 592 阅读 · 1 评论 -
SpringBoot性能监控Actuator的应用
SpringBoot ActuatorSpringBoot 为了监控,控制,追踪,审计应用的状态情况,抽取了Actuator场景,使得微服务引用之后即可获取到应用程序的状态监控,审计控制等功能<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></原创 2021-02-04 16:42:42 · 573 阅读 · 0 评论 -
SpringMVC内部执行细节分析
SpringMVC源码引入SpringMVC本质上是对Servlet的封装,所以SpringMVC内部一定有一个类实现了原生的javax.servlet.http.HttpServlet,发现org.springframework.web.servlet.FrameworkServlet继承了原生的HttpServlet实现了doGet doPost doXXX的方法以doGet为例@Overrideprotected final void doGet(HttpServletRequest requ原创 2021-02-01 17:44:49 · 210 阅读 · 0 评论 -
Spring解决循环依赖三级缓存讲解
Spring5默认通过三级缓存来解决循环依赖,但是必须要求Bean是单例的,如果scope=prototype则无法决绝.Spring的构造器注入无法解决循环依赖问题,setter方法注入可以解决.所谓Spring的三级缓存是指DefaultSingletonBeanRegistry中的三个Map// 一级缓存 缓存完成初始化的bean 完成整个生命周期private final Map<String, Object> singletonObjects = new ConcurrentHa原创 2021-01-27 11:50:39 · 241 阅读 · 0 评论 -
Spring2.x与Spring1.x的AOP顺序区别
Spring2.x与Spring1.x的AOP顺序区别前置代码package com.corn.turorial.spring.aop;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;import org.springframework.stereotype.Component;/** * @author : Jim Wu * @version 1.0 * @functio原创 2021-01-13 16:24:49 · 106 阅读 · 0 评论