- 博客(31)
- 收藏
- 关注
原创 Java Resilience4j-RateLimiter学习
Resilience4j-RateLimiter 是 Resilience4j 中的一个限流模块,我们对 Resilience4j 的 CircuitBreaker、Retry 已经有了一定的了解,现在来学习 RateLimiter 限流器;引入依赖;</</</</
2024-08-17 19:43:23
1234
1
原创 Spring Condition学习
Condition 是 Spring 中的一个接口,它提供了一种在 Spring 配置中基于特定条件来决定是否注册一个 bean 或者一个配置类的机制。这种机制非常灵活,允许开发者基于环境变量、系统属性、类路径资源等多种条件来动态地包含或排除配置。需要注意的是:Spring Boot 提供了许多内置的条件注解(如 @ConditionalOnProperty、@ConditionalOnClass 等),这些注解覆盖了大多数常见的使用场景,因此在可能的情况下,应优先考虑使用它们。
2024-08-17 15:08:15
700
原创 Spring Environment学习
Environment 接口是 Spring 框架中的一个核心接口,它抽象了应用程序的环境配置,这个接口为应用程序提供了一个访问环境属性(如配置文件、系统属性、环境变量等)的通用方式;Environment 接口允许你通过键名来访问配置属性。这些属性可以来自多种源,包括但不限于 application.properties 或application.yml 文件、系统属性、环境变量、命令行参数以及通过编程方式设置的属性。使用 getProperty(String key) 可以获取指定键名的属性值。
2024-08-17 15:07:43
257
原创 Spring Aware接口执行时机
Spring Aware 接口的执行时机有两处,都在 getBean() 中的 initializeBean() 中;下面我们分析这两处时机;
2024-08-17 15:07:03
418
原创 Java Try学习
io.vavr.control.Try 是 Vavr 库的一个类,用于处理可能抛出异常的方法调用;它提供了一种优雅的方式来处理成功和失败的情况,而无需显示地使用 try-catch 块;简而言之,它可以优雅的实现 try-catch;下面,我们学习一下它的简单基本使用;
2024-08-01 23:33:54
580
原创 Spring @Scheduled学习
我们也可以直接往 Spring 容器中自定义注入 ThreadPoolTaskScheduler 对象,只不过需要注意它的 beanName 必须为 taskScheduler;@Bean。
2024-07-13 23:37:32
1637
1
原创 Kafka-03 @KafkaListener学习
SpringBoot 和 Kafka 搭配使用的场景,引入 spring-kafka 即可;
2024-07-10 11:25:20
1538
原创 Java 多线程-3 FutureTask学习
FutureTask 实现了 Runnable 接口和 Future 接口;FutureTask 也是一个 Runnable 对象;
2024-07-09 09:57:16
1152
原创 Java 多线程-3 FutureTask学习
FutureTask 实现了 Runnable 接口和 Future 接口;FutureTask 也是一个 Runnable 对象;
2024-07-09 09:56:26
1095
原创 Spring SimpleAsyncTaskExecutor学习
目前了解的,Spring Kafka 的 KafkaListener 会使用 SimpleAsyncTaskExecutor,其他场景没有见使用;
2024-07-07 23:41:51
631
原创 Mybatis-03 MetaObject学习
如果我们需要给 bean 对象的属性设值,除了我们常用的构造调用方法之外,还可以用反射;下面我们举一个例子;我们既可以通过属性,也可以通过方法给 bean 对象反射设值;
2024-06-30 23:29:57
826
原创 Java 多线程-2 ReentrantLock原理
我们先以 ReentrantLock.lock() 来看简单加锁的场景;主要是 tryAcquire(arg) 和 acquireQueued(),我们重点看下这两个方法做了啥;
2024-06-25 10:07:54
351
原创 Java 多线程-2 ReentrantLock使用
ReentrantLock 是一种基于 AQS(Abstract Queued Synchronizer) 框架的应用实现,是 jdk 中一种线程并发访问的同步手段,它的功能类似于 synchronized 是一种互斥锁,可以保证线程安全;
2024-06-25 10:07:08
392
原创 Java 多线程-1
LockSupport 我们可以把它当成工具类来使用;值得一提的是,LockSupport 的 park() 不会抛出任何异常;
2024-06-23 19:13:24
744
原创 Spring ApplicationListener学习
我们自定义事件和自定义监听器,如下:@Getter@Setter@Component@OverrideSystem.out.println("邮件内容:" + event.getText());System.out.println("邮件地址:" + event.getAddress());测试事件和监听器;@Autowired@Service@Override邮件内容:zengqiang邮件地址:jx。
2024-06-22 15:25:37
927
原创 Spring @PostConstruct注解学习
PostConstruct 注解在我们日常开发中用的很多,它的执行时机是在 Bean 构造方法执行后、populate() 属性注入完成后执行的;
2024-06-20 10:52:35
1161
原创 SpringBoot中的SmartInitializingSingleton学习
实现了 SmartInitializingSingleton 接口的 bean,当所有单例 bean 都已完全初始化后,该接口的 afterSingletonsInstantiated() 会被回调;SmartInitializingSingleton 和 InitializingBean、@PostContruct 有啥区别呢?
2024-06-19 23:39:52
586
原创 Mybatis-02 集成Spring后一级缓存失效
我们知道 Mybatis 的一级缓存作用域是 SqlSession,或者说是 Executor;当我们用 Spring 与 Mybatis 作集成时,会出现一级缓存 “失效” 的现象;这是为什么?我们先看下面这个例子;在这个例子中,使用 UserMapper 调了两次 selectById() 方法;观察日志会发现创建了两次 SqlSession,一级缓存肯定没有生效;
2024-06-15 21:26:29
403
原创 Spring三级缓存与循环依赖
Spring 的三级缓存、循环依赖,我们经常听到这两个词,包括面试也会被面试官问及三级缓存是啥?为啥需要三级缓存?循环依赖是啥?Spring 是如何解决循环依赖的?什么样的循环依赖 Spring 无法解决?带着上述的问题,我们深入看一下 Spring BeanFactory 的 getBean() 流程;这篇文章需要看官有一定的 Spring 源码了解;
2024-05-19 22:20:18
508
1
原创 Spring AOP-6 @Async生成AOP对象
前面我们在介绍 Spring AOP 的时候生成 proxy 代理对象都是通过 AnnotationAwareAspectJAutoProxyCreator,以及它的抽象父类 AbstractAutoProxyCreator#postProcessAfterInitialization();
2024-05-15 21:06:47
777
原创 Spring AOP-5 @Transactionl生成AOP代理对象
从前面介绍的,我们对 Spring AOP 已经有了较全面的了解,现在我们对 @Transactional 注解生成 AOP 代理对象的过程做一个解析;我们直接在 AbstractAutoProxyCreator#wrapIfNecessary() 方法中创建代理对象处打一个断点,和 Spring AOP 相关的 Advisor 是 BeanFactoryTransactionAttributeSourceAdvisor;
2024-05-12 22:56:19
693
1
原创 Spring AOP-4 @Autowired值注入的过程
其实 @Autowired 和 Spring AOP 联系不大,但是这个注解和 @Lazy 搭配时,就和 Spring AOP 有千丝万缕的联系了;由于我对 @Autowired 注解理解的不是很多,所幸一起 debug 看看它里面的流程;
2024-05-10 23:29:10
831
1
原创 Spring AOP-3 怎么生成代理类对象
我们知道代理类是在 initializeBean() 的时候的 applyBeanPostProcessorsAfterInitialization() 中触发的,通过后处理器的 postProcessAfterInitialization() 生成的;那么,真正执行 AOP 代理的是哪个后置处理器 BeanPostProcessor 呢?
2024-05-04 20:32:27
861
原创 Spring AOP-2 Advise和Advisor和Advised
在 Spring 中,经常可以看到 Advice、Advisor、Advised 等接口,它们长的很像,经常容易搞混;但是它们是完全不同的东西,有着不同的功能;理解这几个接口,能让我们更好的理解 Spring AOP,我们先简单介绍这几个接口;
2024-04-30 17:58:33
773
1
原创 Spring AOP-1 Pointcut和join point
Spring 容器中 Bean 的每一个类、方法都可以视为一个 join point,那么 join point 是如何与 Advisor 进行关联的呢?Sping 是通过 Pointcut 来将 Bean 中的 join point 与 Advisor 进行匹配的;
2024-04-30 11:33:19
479
1
原创 SpringBoot 参数处理器处理Optional和Pageable参数
在实际应用中,处理器方法的参数各式各样,遇到 Optional< Boolean > 和 Pageable 参数,SpringBoot 是如何进行解析的呢?参数 5 和参数 6 对应的参数是 Optional< Boolean > 和 Pageable 类型,下面我们进到 SpringBoot 参数解析部分看看这俩特殊参数是如何进行解析的;
2024-04-25 16:36:21
701
1
原创 Cglib动态代理
Cglib 的动态代理,就是子类继承父类。即:通过生成一个被代理对象的子类,然后重写父类的方法,所以目标类和方法不能声明为 final 类型,可以强制转化为被代理类(也就是自己写的类),即父类引用指向子类对象;
2024-04-06 23:48:43
437
1
原创 JDK的动态代理
cl = getProxyClass0(loader, intfs) 中,生成并加载 Class 对象和 Proxy 的静态内部类 ProxyClassFactory 有关,我们简单看下 ProxyClassFactory 做了啥,了解即可;1、jdk 的动态代理只有被代理对象实现了接口的情况下才能工作,因为代理对象 $Proxy0 需要继承 Proxy 类,并且代理对象会实现接口;3、代理类 $proxy0 的方法实际上执行的都是 invocationHandler.invoke();
2024-04-06 22:07:15
276
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人