- 博客(54)
- 收藏
- 关注
原创 AOP +Guava实现一个限流拦截
其中key代表限流的字段例如 userId.permitPerSecond代表每秒最大访问量blackListCount() 代表违反限流几次进入黑名单fallbackmethod() 代表限流和黑名单之后的降级方法其中 loginRecord 记录了标识字段key对应的限流RateLimiter.当违规一次时 blackList中的数值 + 1如果违反了注解中定义的黑名单次数值则直接走fallback()降级的方法.@Aspect@Slf4j@Component。
2024-07-28 15:26:12
234
原创 手写简易版Spring IOC容器05【学习】
getBean时首先拿到当前bean对象判断是FactoryBean对象吗?如果是需要从上一步中FactoryBeanRegistry的map中来获取对象。如果不是先创建FactoryBean对象还是继续去FactoryBean中去获取。= null) {// 如果是 FactoryBean,则需要调用 FactoryBean#getObject。
2024-07-22 15:04:44
482
原创 手写简易版Spring IOC容器04【学习】
在applyBeanPostProcessorsBeforeInitialization之后执行// 1. 执行 BeanPostProcessor Before 处理// 执行 Bean 对象的初始化方法try {// 2. 执行 BeanPostProcessor After 处理// 1. 实现接口 InitializingBean 调用方法.// 2. 配置信息 init-method {判断是为了避免二次执行销毁}
2024-07-21 15:24:12
445
原创 手写简易版Spring IOC容器03【学习】
用于编排整体的方法@Override// 1. 创建beanFactory并加载beanDefinition.// 2. 获取BeanFactory// 3. 在 Bean 实例化之前,执行 BeanFactoryPostProcessor// 4. BeanPostProcessor 需要提前于其他 Bean 对象实例化之前执行注册操作// 5. 提前实例化单例Bean对象// getBean方法....
2024-07-20 16:54:06
878
原创 手写简易版Spring IOC容器02【学习】
其中applyPropertyValues用于从beanDefinition中读取属性的配置信息然后通过BeanUtil(hutool-all中提供的类)为其赋值@Overridetry {// 创建bean实例Class<?if (null!break;// 设置属性值try {// 从beanDefinition中获取property通过Resource获取文件流。
2024-07-19 15:16:23
626
原创 手写简易版Spring IOC容器01【学习】
继承单例 获得单例的全部方法,实现BeanFactory接口然后定义模板方法和两个抽象方法让子类实现.@Override// 首先从单例对象的map中去获取.if(bean!// 去执行子方法的逻辑获取beanDefinition@Override// 首先从单例对象的map中去获取.if(bean!// 去执行子方法的逻辑获取beanDefinition继承上一个抽象类实现其中模板定义的一个方法 (createBean)@Overridetry {
2024-07-18 16:32:35
433
原创 Spring是如何管理事务的?
Spring 的事务管理机制通过编程式事务管理和声明式事务管理两种方式提供了灵活的事务控制。声明式事务管理是最常用的方式,通过注解,可以方便地控制事务的传播行为、隔离级别、超时时间和回滚规则。Spring 事务管理机制的强大和灵活性,使得开发者可以轻松地处理复杂的事务场景,确保数据的一致性和完整性。
2024-07-12 08:47:56
826
原创 kafka发送消息流程
配置props.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, RoundRobinPartitioner.class);
2024-07-11 11:40:51
356
1
原创 kafka的副本replica
kafka-topics.sh --create --topic myTopic --partitions 3 --replication-factor 1 --bootstrap-server localhost:9092
2024-07-09 12:18:57
343
原创 cloneable接口
浅克隆:复制对象时,只复制原对象的基本类型字段和引用类型字段的引用。克隆对象与原对象共享同一个引用对象。深克隆:复制对象时,除了复制基本类型字段外,对于引用类型字段,也会创建新的实例并复制其内容。克隆对象与原对象完全独立。
2024-07-09 09:24:51
800
原创 LinkedHashMap
通过在其哈希表条目结构中增加两个指针(before和after),维护一个双向链表,从而保证元素的有序性。默认情况下,它按插入顺序迭代元素;如果在构造时指定为true,则按访问顺序迭代元素。这使得能够在特定的顺序要求下提供高效的键值对存储和访问。
2024-07-09 09:11:42
952
原创 Kafka学习
分为消费者 Croducer 主题 Topic 生产者 Producer其中Topic包括Topic中包括了分区和offset偏移量的概念;一个简单的Kafka发消息收消息java代码:生产者。
2024-07-08 13:07:21
401
原创 ResourceHttpRequestHandler【Spring源码学习】
首先由SimpleUrlHandlerMapping记录所有的映射关系;
2024-07-07 14:50:09
163
原创 RouterFunctionMapping和HandlerFunctionAdapter【Spring源码学习】
【代码】RouterFunctionMapping和HandlerFunctionAdapter【Spring源码学习】
2024-07-07 14:33:20
133
原创 Tomcat异常处理【Spring源码学习】
当没有指定具体控制器异常处理方法时,默认走的异常会被tomcat捕获;例如在这个配置类中添加MVC的配置。我们可以在配置类中添加如下代码。
2024-07-06 14:31:05
261
原创 @ControllerAdice统一返回值类型【Spring源码学习】
我们可以通过在@ControllerAdvice注解类上实现ResponseBodyAdvice注解来实现统一返回值类型;例如统一接口的返回类型为Result类。方法来进行检查当前类是否加了这个注解;
2024-07-05 14:43:34
247
原创 控制器方法执行流程和 @InitBinder【Spring源码学习】
首先说明@ControllerAdvice和aop没有任何关系!加在ControllerAdvice中只对所有控制器都生效全局的在开始时就会保存到handlerMappingAdapter中的cache中;
2024-07-01 19:46:03
178
原创 Controller中的参数解析器【Spring源码学习】
mockRequest构建request请求定义controller解析过程通过handlerMethod.getMethodParameters拿到方法对应的全部的参数,然后对参数内容进行解析,RequestParamMethodArgumentResolver用来解析@RequestParam注解;首先通过supportsParameter看当前参数是否满足解析要求;如果满足则进行参数解析赋值;
2024-06-29 15:18:40
214
原创 RequestMappingHandlerAdapter【Spring源码学习】
/ 解析器是否支持某个参数 判断是否加了我们的@Token注解@Override= null;// 具体解析参数@Override// 拿到请求中的token将参数解析器加入adapter中@Bean具体执行// 拿到 RequestMappingHandlerAdapter// 验证自定义参数解析器// 拿到当前请求对应的执行链// 执行请求对应的方法方法上加上此注解代表返回值类型要被解析为yml格式controller中使用@Yml。
2024-06-29 11:45:23
182
原创 RequestMappingHandlerMapping【Spring源码学习】
通过RequestMappingHandlerMapping可以获得对应的请求路径请求方式对应的方法Map。返回的并不是只有method方法,而是包括了拦截器等组成的一个执行器链!
2024-06-29 11:14:05
309
原创 MySQL中什么是索引合并?
索引合并是数据库查询优化的一种技术,它允许数据库管理系统在处理查询时,利用多个索引来改进数据检索的效率。这种技术主要应用在那些设计多个条件的查询中,通过合并多个索引的结果集,找出最终满足所有条件的数据行。在MySQL中如果使用了索引合并,执行计划中会明确显示type为index_merge,key中列出用到的索引列表,并且在extra中会提示具体用了哪种索引合并策略。上述这种情况两个列之间用and连接会使用。上述这种情况两个列之间用or连接会使用。
2024-06-22 09:04:59
250
原创 MySQL索引一遵循最左前缀匹配吗?
索引底层是一个B+树,如果是联合索引的话,在构造B+树的时候,会先按照左边的Key进行排序,左边的key相同时再依次按照右边的key排序。所以,通过索引查询的时候,也需要遵守最左前缀匹配机制,也就是需要从联合索引最左边开始进行匹配,这时候就要求查询语句的where条件中,包含最左边的索引值。
2024-06-19 10:02:01
305
原创 MySql只操作同一条记录,也会发生死锁吗?
为了避免这种问题的发生,可以在程序中设置获得锁的顺序,例如只能按照先获得主键索引 --> 普通索引的顺序获取锁,避免死锁的发生。如果刚好在这时,有另外一个线程已经拿到了当前主键索引的锁,同时尝试去在该事务中去拿记录的普通索引的锁。这时候就会发生死锁。当我们在事务中,更新一条记录的时候,如果用到普通索引作为条件,那么会先获取普通索引的锁,然后再尝试获取主键索引的锁。
2024-06-18 09:50:10
283
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人