spring
文章平均质量分 78
跟心爱的人浪迹天涯
Java小学生
展开
-
SpringBoot 自动配置启动流程 为什么没有执行selectImports方法
SpringBoot main方法所在类添加了注解@SpringBootApplication, 在此注解中添加了注解@EnableAutoConfiguration, 默认开启了自动配置@Import(AutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration { ...}AutoConfigurationImportSelector实现了DeferredImportSelector接口,原创 2021-02-03 19:32:27 · 2525 阅读 · 4 评论 -
Spring和JDK中观察者设计模式 Event事件监听
观察者设计模式特性被观察者有观察者的引用观察者不能主动发起操作, 需要等被观察者通知在JDK中通过继承Observable类作为一个被观察者, 实现Observer接口作为一个观察者模拟场景 天气变化, 任何狗做出不同反应public class WeatherObservable extends Observable { private int temperature; public int getTemperature() { return temperat原创 2021-01-27 10:48:03 · 282 阅读 · 0 评论 -
Spring Async注解 方法异步调用 用法 源码解析 以及错误使用解决方法
Async是Spring新加入的一种异步机制, 大多开发者也只是停留在会用的水平, 对其原理不太了解, 作为一名开发人员, 我们不仅要知其然, 更要知其所以然, 才能在项目开发过程中不会踩到不必要的坑.用法1.在SpringBoot启动类添加注解@EnableAsync@EnableAsync@SpringBootApplicationpublic class WebApplication { public static void main(String[] args) {原创 2021-01-17 01:27:08 · 1117 阅读 · 0 评论 -
解决java@RequestBody中枚举不匹配问题 空字符串转枚举异常
异常org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type *.**.**.TaskStatusEnum from String “”: value not one of declared Enum instance names: [0, 1, 2]; nested exception is com.fasterxml.jac原创 2021-01-15 13:16:08 · 6246 阅读 · 4 评论 -
利用Spring模拟FeignClient自己实现RMI远程调用
首先应了解FeignClient的原理, 参考文章 Feign远程调用过程 初始化/动态代理/负载均衡原理:在Application启动类中注入Enable,注解中Import导入ImportBeanDefinitionRegistrar实现类,在实现类中即可完成对BeanDefinition的注入,然后BeanDefinition的BeanClass设置成Feign的代理类,当调用方法时,调用代理对象的方法,完成http远程调用。本文直接用了POST发起远程请求,并且服务发起方和提供方在同一个服务中,原创 2021-01-04 20:15:17 · 736 阅读 · 0 评论 -
Spring核心类ConfigurationClassPostProcessor解析:Spring初始化 Bean扫描、Configuration类动态代理
Spring在初始化时会向容器添加6个BeanPostProcessor,其中最为重要的就是ConfigurationClassPostProcessor。ConfigurationClassPostProcessor是Spring容器初始化的核心类,实现了BeanPostProcessor的子接口BeanDefinitionRegistryPostProcessor。postProcessBeanDefinitionRegistry用来扫描并解析指定路径的类,生成对应的BeanDefinition,解原创 2021-01-04 11:21:22 · 555 阅读 · 0 评论 -
Spring解决循环依赖-源码分析
首先从doGetBean开始分析, 此时容器已初始化完成, 开始执行bean的初始化protected <T> T doGetBean( final String name, final Class<T> requiredType, final Object[] args, boolean typeCheckOnly) throws BeansException ...原创 2020-11-27 17:32:44 · 120 阅读 · 0 评论 -
Feign远程调用过程 初始化/动态代理/负载均衡
Feign Invoke 远程调用, 底层使用了ribbon, 对ribbon进行封装, 编程过程中不需要主要调用细节.EnableFeignClients在SpringCloud启动类中添加注解 EnableFeignClients@Import(FeignClientsRegistrar.class)public @interface EnableFeignClients { ...}FeignClientsRegistrarclass FeignClientsRegistrar原创 2020-11-19 12:55:57 · 1040 阅读 · 0 评论 -
Eureka客户端源码解析 注册/心跳/本地刷新/下线
Eureka服务端与客户端交互是通过发送http请求完成的. 使用JerseyClient进行服务间通讯, Jersey是一个RESTFUL请求服务JAVA框架, 与常规的JAVA编程使用的struts框架类似, 它主要用于处理业务逻辑层.入口在Client包中找到启动类 重点EurekaClientAutoConfigurationorg.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.springframework.原创 2020-11-18 20:01:04 · 335 阅读 · 0 评论 -
Eureka服务端源码解析 入口/注册/刷新/下线
Eureka服务端与客户端交互是通过发送http请求完成的. 使用JerseyClient进行服务间通讯, Jersey是一个RESTFUL请求服务JAVA框架, 与常规的JAVA编程使用的struts框架类似, 它主要用于处理业务逻辑层.入口在Server包中设置了启动类 spring.factororg.springframework.boot.autoconfigure.EnableAutoConfiguration=org.springframework.cloud.netflix.eure原创 2020-11-18 19:40:47 · 564 阅读 · 0 评论 -
Spring AOP动态代理(JDK与CGLib)及类内部方法事务不生效原因解析
1.创建接口public interface UserService { // 模拟操作 boolean getById(String id);}2.创建实现类public class UserServiceImpl implements UserService { // 实现接口方法, 并返回结果 public boolean getById(String id) ...原创 2019-11-14 13:49:20 · 1339 阅读 · 1 评论 -
Spring使用自定义注解和拦截器实现鉴权
自定义注解类Target 注解可使用位置 类和方法Retention 生命周期 在运行过程中仍然使用import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target({ElementType.TYPE, ElementType.ME原创 2020-11-16 12:44:08 · 980 阅读 · 0 评论 -
Spring MyBatis初始化解析及sql执行流程
Spring容器启动初始化启动类上添加了@MapperScan注解,指定了Mapper文件所在包,容器会扫描到对应的包,并创建对应mapper的代理类。MapperScan@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(MapperScannerRegistrar.class) // 导入注册配置类@Repeatable(MapperScans.class)public @inter原创 2020-11-12 11:45:11 · 463 阅读 · 2 评论 -
Spring AOP用法及原理
AOP作为Spring的第二大核心内容,日常开发中,也是经常会用到的。所谓面向切面编程,就是对某些特定的方法执行的前后切入一些特定的代码。核心原来采用动态代理实现。使用场景日志 在方法执行前后打印日志事务 在方法执行前开启事务,执行完提交事务,异常回滚事务权限校验 在方法执行前对用户的登录状态及权限做校验使用方法步骤如下1.添加Aspect依赖<dependency> <groupId>org.springframework</groupId>..原创 2020-07-10 14:02:25 · 148 阅读 · 0 评论 -
Spring各种注解及含义
@Configuration注解在类上,标记此类是一个配置类,Spring会扫描到配置类并读取内部配置@ComponentScan注解在类上,用于指定spring扫描组件的包路径,可以为数组;还可以进行筛选过滤:excludeFilters includeFilters可以按照类型、正则、自定义(实现接口)、注解、AspectJ@Controller @Service @Repository @Component都是用来标记Spring容器组件的,只是场景不同;Controller Service原创 2020-07-09 14:17:32 · 3355 阅读 · 0 评论 -
SpringMVC页面访问流程(源码解析)
SpringMVC有五大核心组件, DispatcherServlet, HandlerMapping, Controller, ModelAndView, ViewResolver; 其中以DispatcherServlet最为核心, 以下简称ds, 类似电脑cpu.当容器接收到请求后, 会先到xml中找到对应servlet, 本质就是ds, 然后ds父类的service方法进行处理, 最后进...原创 2019-11-23 00:01:57 · 281 阅读 · 0 评论 -
SpringMVC初始化源码解析(基于XML配置)
熟悉SpringMVC的同学都知道SpringMVC的核心是DispatcherServlet(以下简称ds), 由于继承了HttpServlet, 所以它本质就是servlet, 当我们使用tomcat或其他Web容器启动项目时, 会先扫描项目的web.xml文件, 我们会在该文件中指定ds的具体路径, 并设置启动load-on-startup即加载此ds, 然后容器会自动调用ds父类中的ini...原创 2019-11-22 23:24:55 · 181 阅读 · 0 评论 -
SSM项目使用AOP实现简单的读写分离
准备条件事先准备两个数据库服务,并配置为主从分布(master-slave),主机服务用于写,从机服务只用来读。具体配置请前往https://blog.csdn.net/guandongsheng110/article/details/71173080查看。1. pom.xml添加jar<dependency> <groupId>org.aspectj...原创 2019-01-24 16:53:59 · 398 阅读 · 0 评论