- 博客(82)
- 收藏
- 关注
原创 【Spring -- 12 Spring代理选择 】
在 Java 中,切点(Pointcut)是用于定义在何处应用横切关注点的表达式。底层的切点实现主要依赖于 Java 反射机制。通知(Advice)是切面在特定连接点上的动作,主要包括前置通知、后置通知、环绕通知等。如果指定了接口,且 proxyTargetClass = false,使用 JdkDynamicAopProxy。切面(Aspect)是通知和切点的结合。通知的实现通常需要在目标方法执行前后或周围进行介入,以实现特定的横切逻辑。
2024-07-21 14:10:31
585
原创 【Spring -- 11 cglib代理(Enhancer )】
避免反射, 提高性能, 代价是一个代理类配两个 FastClass 类, 代理类中还得增加仅调用 super 的一堆方法。saveSuper(long) 编号 2,不增强,仅是调用 super.save(long)用编号处理方法对应关系比较省内存, 另外, 最初获得方法顺序是不确定的, 这个过程没法固定死。saveSuper(int) 编号 1,不增强, 仅是调用 super.save(int)saveSuper() 编号 0,不增强, 仅是调用 super.save()save(int) 编号 1。
2024-07-19 13:05:34
577
原创 【Spring -- 10 jdk 代理(Proxy)】
总之,JDK 动态代理生成的代理类是一个实现了目标接口的 Proxy 子类,它将所有方法调用委托给了。然后我们使用 JDK 动态代理创建。实现类,从而实现了动态代理的功能。
2024-07-19 11:57:24
396
原创 【Spring -- 09 AOP 实现方式】
在实现 AOP 功能时,Spring 会在运行时动态地为目标对象生成代理对象,并在代理对象中注入切面逻辑。这些代理对象会替代原始的目标对象,从而实现在不修改目标对象源码的情况下添加切面功能。Spring 会根据目标对象的情况自动选择合适的代理方式。如果目标对象实现了接口,则使用 JDK 动态代理;总的来说,JDK 动态代理和 CGLIB 代理都是通过动态生成代理类的方式,在不修改目标对象源码的情况下,实现了切面功能的添加。在这个示例中,CGLIB 动态生成了。方法,在方法实现中添加了切面逻辑。
2024-07-19 00:35:35
841
原创 【Spring -- 08 Scope 】
在 Spring 和 Spring Boot 程序中,不同的作用域(Scope)管理 Bean 的创建和销毁周期。
2024-07-19 00:18:09
330
原创 【Spring -- 07 Aware 接口及 InitializingBean 接口】
Spring 提供了多种初始化手段,除了 @PostConstruct,@Bean(initMethod) 之外,还可以实现 InitializingBean 接口来进行初始化,如果同一个 bean 用了以上手段声明了 3 个初始化方法,那么它们的执行顺序是。接口是 Spring 框架中一组回调接口,用于使 Spring 容器内的 bean 获得对容器基础设施的访问权。接口是 Spring 提供的另一个回调接口,用于在 bean 属性设置完毕后执行自定义的初始化逻辑。的子接口,提供了更强大的功能。
2024-07-18 17:22:44
661
原创 【Spring -- 06 BeanFactory 后处理器 (BeanFactoryPostProcessor )】
根据解析结果,生成相应的 bean 定义,并将这些 bean 定义注册到 Spring 容器中。这包括扫描的结果、解析@Bean方法的返回值、处理@Import和的内容等。
2024-07-18 13:16:46
1026
原创 【Spring -- 05 Bean 后处理器 (BeanPostProcessor)】
具体来说,Bean 后处理器用于在 bean 创建过程中,进行依赖注入和其他增强功能。和其他依赖注入注解的解析是 Bean 生命周期阶段(依赖注入、初始化)的扩展功能,这些功能由特定的 Bean 后处理器来完成。通过在配置中添加自定义注解的类型,可以扩展其功能。:将依赖描述符添加到待处理的注入点列表中,以便后续进行实际的依赖注入。:将获取到的依赖对象注入到 bean 的对应字段或方法参数中。:对于找到的注解元素,解析注解的属性(例如,对象,进行实际的依赖注入。对象,该对象包含了依赖注入的详细信息。
2024-07-18 00:53:25
797
原创 【Spring -- 03 ApplicationContext】
是 Spring 框架中的一个核心接口,它是的子接口,提供了更多的企业级功能。除了包含。
2024-07-17 15:11:57
404
原创 【Spring -- 02 BeanFactory 】
是 Spring 框架的核心接口之一,负责管理 Spring 应用上下文中的所有 bean 对象。它是一个简单的 IOC(Inversion of Control)容器,是的基础。以下是对。
2024-07-17 14:59:58
589
原创 【Spring -- 01 Spring简介】
是一个综合性的编程和配置模型,用于构建现代化的基于 Java 的企业应用程序。:包括依赖注入(DI)、面向切面编程(AOP)、事件处理、资源管理、国际化(i18n)、验证、数据绑定、类型转换和 Spring 表达式语言(SpEL)等 (:Spring 提供了强大的数据访问支持,包括 JDBC、ORM(如 Hibernate 和 JPA)、事务管理、和数据访问对象(DAO)支持 (:这是一个基于 Spring 的快速开发框架,提供了开箱即用的设置,简化了 Spring 应用程序的创建和部署 (
2024-07-17 14:30:34
240
原创 【JUC —— 14 CAS & Unsafe】
CAS和Unsafe是 Java 并发编程中实现无锁数据结构和算法的基础。CAS通过硬件支持的原子操作确保数据的一致性,而Unsafe类提供了直接与底层硬件交互的方法,使得 CAS 操作得以实现。尽管Unsafe类的使用存在风险,但在高性能并发编程中,它是一个强大且不可或缺的工具。
2024-07-13 14:05:18
562
原创 【JUC —— 13 原子类】
这些示例代码演示了如何使用 Java 原子类进行线程安全的操作。运行结果显示了在多线程环境中,原子类能够保证操作的原子性和线程安全性。需要注意的是,在不同的运行环境中,由于线程调度的不确定性,具体的输出顺序可能会有所不同,但最终的结果应该是一致的,符合预期。
2024-07-13 11:42:46
378
原创 【JUC —— 12 JMM 】
JMM 是 Java 的一部分,用于屏蔽不同硬件和操作系统的内存访问差异,保证 Java 程序在不同平台上的一致性。JMM 规范了变量在内存中的存储和读取行为,并通过一系列规则来确保多线程程序的正确性。
2024-07-13 00:07:25
832
原创 【JUC —— 11 CompletableFuture 异步回调 】
在 Java 中,Future接口表示一个异步计算的结果,但它并没有直接提供异步回调的能力。通常情况下,我们使用Future来表示一个异步任务,并通过阻塞方法get()来获取结果。为了实现异步回调功能,我们可以结合Future和其他工具类,比如 ExecutorService和 CompletableFuture。
2024-07-12 22:24:08
365
原创 【JUC —— 09 阻塞队列】
阻塞队列(Blocking Queue)是并发编程中的一个重要概念,用于在多线程环境下安全地传递数据。它提供了线程安全的入队和出队操作,并且当队列为空或者已满时,支持阻塞操作,直到有空间或元素可用为止。
2024-07-11 01:35:14
498
原创 【JUC —— 08 ReadWriteLock(读写锁)】
Java中的读写锁(ReadWriteLock)是并发编程中的一种高级锁机制,允许多个读线程同时访问共享资源,但在写线程访问时,所有的读线程和其他写线程都会被阻塞。这种机制可以提高并发性能,因为读操作之间是互不影响的。Java并发包()中提供了接口及其实现类。
2024-07-11 01:18:19
287
原创 【JUC —— 07 CountDownLatch、CyclicBarrier和Semaphore】
用于一个或多个线程等待其他线程完成操作。计数器到达零时,所有等待的线程都会被唤醒。:用于一组线程相互等待,直到所有线程都到达屏障点。屏障可以重复使用。Semaphore:用于控制对资源的并发访问,通过许可机制实现。线程可以获取和释放许可,当没有许可可用时,线程会被阻塞。
2024-07-11 00:17:41
615
原创 【JUC —— 06 Runnable、Callable和FutureTask 】
Callable:适用于需要返回结果或抛出受检异常的任务。Runnable:适用于不需要返回结果或抛出受检异常的任务。FutureTask:用于包装Callable或Runnable,并可以在独立线程中执行它们,还可以获取任务的执行结果或等待任务完成。get()方法会阻塞线程。
2024-07-10 23:55:38
288
原创 【JUC —— 05 线程安全集合类】
在Java中,线程安全的集合类通过多种机制确保在多线程环境下操作集合时不会发生数据竞争或不一致的情况。Vector。
2024-07-10 23:33:36
314
原创 【JUC —— 04 8锁问题】
synchronized锁的是方法的调用者(拥有者)通过"8锁问题"可以深入理解Java中的锁机制和关键字的使用。不同的锁(类锁和对象锁),不同的调用顺序和条件(静态方法和非静态方法),会导致不同的执行结果。通过这些案例,可以更好地理解并发编程中的锁机制。
2024-07-10 22:49:57
408
原创 【JUC —— 02 synchronized & Lock】
在Java中,和Lock都是用于实现线程同步的机制。尽管它们都用于解决并发问题,但它们有不同的特性和使用场景。
2024-07-09 22:46:01
1578
原创 【JUC —— 01 JUC介绍】
Java JUC(Java Util Concurrent)是Java提供的一套用于并发编程的工具包,它提供了许多类和接口来简化和优化多线程编程。JUC主要包括并发集合、同步工具、执行器框架、锁机制等。
2024-07-09 22:23:08
439
原创 【RocketMQ —— 08 事务消息】
首先,需要定义一个实现 RocketMQ 的接口的事务监听器,用于处理本地事务的执行和消息的提交或回滚。@Override// 执行本地事务,根据本地事务执行的结果返回对应的状态// 例如,假设这里是一个数据库操作,如果操作成功则返回 COMMIT_MESSAGE,否则返回 ROLLBACK_MESSAGE// 根据实际情况编写具体的本地事务逻辑,确保本地事务和消息的一致性@Override// 检查本地事务的状态,根据本地事务的执行结果返回对应的状态。
2024-07-06 14:47:07
190
原创 【 RocketMQ —— 07 过滤消息】
在RocketMQ中,可以通过消息的Tag和SQL92表达式来实现消息的过滤。这些功能可以帮助消费者只接收特定条件下的消息,从而实现更精准的消息订阅和处理。下面分别介绍如何使用Tag和SQL92来过滤消息。
2024-07-06 01:10:55
281
原创 【 RocketMQ —— 06 批量消息】
在RocketMQ中,批量消息(Batch Message)是一种高效的消息发送方式,适用于需要同时发送多条消息的场景。通过批量消息,生产者可以在一次网络请求中发送多条消息,从而提高吞吐量。下面是如何在Spring Boot项目中使用RocketMQ实现批量消息的示例。
2024-07-06 00:50:57
418
原创 【 RocketMQ —— 05 延迟消息】
生产延迟消息时,需要设置消息的延迟级别。消费延迟消息与普通消息没有区别。在这个例子中,delayLevel。参数指定了消息的延迟级别。
2024-07-06 00:47:38
350
原创 【 RocketMQ —— 04 顺序消息】
在RocketMQ中,顺序消息(Ordered Message)保证了消息在生产和消费时的顺序性。RocketMQ通过分区顺序(Partition Order)来实现这一点。消息按特定的顺序发送到同一个分区,消费时也是按相同的顺序从该分区读取消息。Apache RocketMQ 中用于产生消息的运行实体,一般集成于业务调用链路的上游。生产者是轻量级匿名无身份的。Apache RocketMQ 消息传输和存储的分组容器,主题内部由多个队列组成,消息的存储和水平扩展实际是通过主题内的队列实现的。
2024-07-06 00:39:03
677
原创 【 RocketMQ —— 03 消费模式】
在RocketMQ中,消费者可以以两种主要模式来消费消息:集群消费(Clustering Consumption)和广播消费(Broadcasting Consumption)。这两种模式在消费策略上有所不同,适用于不同的场景。
2024-07-05 23:57:16
526
原创 【 RocketMQ —— 02 同步,异步,单向消息】
在RocketMQ中,发送消息的方式主要有三种:同步发送、异步发送和单向发送。下面是这三种发送方式在Spring Boot项目中的实现示例。
2024-07-05 23:51:09
418
原创 【 RocketMQ —— 01 SpringBoot整合Rocketmq】
确保RocketMQ的NameServer和Broker已经启动。可以参考RocketMQ官方文档进行配置和启动。通过以上步骤,可以在Spring Boot项目中集成RocketMQ,实现消息的发送和接收功能。编写一个控制器或者服务来调用生产者发送消息,并观察消费者是否正确接收到消息。中配置RocketMQ相关的属性,例如NameServer地址等。定义一个RocketMQ生产者bean,用于发送消息。定义一个RocketMQ消费者,用于接收消息。
2024-07-05 23:37:31
256
原创 【 Nacos —— 03 nacos服务发现】
服务注册:服务启动时自动将自己的信息注册到Nacos。服务发现:客户端可以通过Nacos查询到可用的服务实例列表。健康检查:Nacos定期检查服务实例的健康状态,确保服务的可用性。服务路由:支持多种路由策略,根据需求选择合适的服务实例进行调用。服务治理:支持服务的动态配置和管理,提供降级、熔断等治理能力。
2024-07-02 00:26:52
380
原创 【 Nacos —— 02 nacos配置管理 】
Nacos的配置管理功能允许你集中管理应用程序的配置信息,包括但不限于数据库连接信息、服务端口、环境配置等。动态配置管理:支持实时修改配置,应用程序可以动态获取最新的配置信息,无需重启。配置版本管理:支持配置版本的管理和回滚。配置监听:支持配置变更的监听,当配置发生变化时,通知监听的客户端进行更新。配置推送:支持将配置推送给指定的应用实例,实现配置的定向推送和管理。配置分组:支持将配置进行分组管理,不同的应用或环境可以有不同的配置分组,便于管理和区分。
2024-07-01 23:23:55
475
原创 【Redis —— 08 缓存穿透和雪崩】
缓存穿透是指查询一个根本不存在的数据,因为缓存和数据库都没有该数据,导致每次请求都要去数据库查询,失去了缓存的意义。这种情况通常会导致数据库压力增大。缓存雪崩是指在某一时刻,缓存集中过期或者缓存服务器宕机,导致大量请求直接访问数据库,给数据库带来巨大压力。
2024-06-30 22:56:37
645
原创 【Redis —— 07 哨兵模式(Sentinel)】
Redis 哨兵(Sentinel)模式用于提供高可用性解决方案,可以自动监控 Redis 主从复制结构,进行故障检测和自动故障转移,从而确保系统的高可用性。
2024-06-30 16:07:54
477
原创 【Redis —— 06 主从复制配置】
Redis 主从复制(replication)允许一个 Redis 服务器(称为主服务器)将数据复制到一个或多个 Redis 服务器(称为从服务器)。这种机制可以用于提高数据的可用性和分布式读取能力。
2024-06-30 15:39:54
672
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人