自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

探索知识,创造未来

每一篇文章都是心灵的独白,每一个想法都是未来的种子

  • 博客(45)
  • 收藏
  • 关注

原创 Netty入门指南之Reactor模型

在我们之前的文章中,我们详细地探讨了Java NIO和Selector的相关内容,这为我们进一步的学习打下了坚实的基础。从本篇文章开始,我们将深入学习并理解Reactor模型这篇文章的阅读绝对值得你的精心研读。Netty的基础建立在NIO之上,如果单纯的学习Netty,你可能只会看到一堆的API,而无法深入理解其背后的设计原则和工作机制。然而,本篇文章从设计理念到编码实践,详细剖析了Reactor模型,为Netty的学习铺平了道路。

2023-11-13 21:15:44 635

原创 Netty入门指南之NIO Selector写操作

ServerSocketChannel的ACCEPT事件和SocketChannel的READ事件。然而,除了这两种事件外,还存在另一种重要的事件类型,即WRITE事件。在今天的学习中,我将专门对WRITE事件进行探讨。基于我们已经掌握的知识,我们将继续深入理解并掌握如何有效地处理和利用WRITE事件,以提高我们服务端程序的性能和效率。本文主要探讨了服务端在向客户端发送数据过程中可能遇到的问题,并提出了通过使用Selector监听WRITE事件的解决方案。

2023-11-12 20:11:57 292

原创 Netty入门指南之NIO Selector监管

在我们的上一篇文章中,我们详细讲解了如何使用NIO进行网络通信并成功解决了服务端的两次阻塞问题。这种解决方案有效地改善了通信效率。然而,引入非阻塞机制后,又产生了一个新的问题。我们注意到,在没有客户端请求和IO通信的情况下,上篇文章中的while循环会持续运行,导致CPU资源的浪费。更为复杂的是,我们的程序是单线程运行的,所有的请求接收和IO通信都由这一个线程处理,这无疑进一步拉低了CPU的利用率。

2023-11-11 22:57:19 468

原创 Netty入门指南之NIO 网络编程

在前面的文章中,我们详细学习并使用了NIO中的Channel和Buffer。然而,我们的示例中Channel的两端都是文件,我们一直使用的是FileChannel,没有与网络通信结合起来。从今天开始,我们将进入网络编程领域,使用NIO中的和,为后续的Netty学习打下坚实的基础。在今天的文章中,我们将深入探讨SocketChannel和ServerSocketChannel,这两个在网络通信中起着关键作用的组件。我们将揭开网络通信中服务端的两次阻塞现象的神秘面纱,并详细介绍NIO如何有效地处理非阻塞。

2023-11-10 22:05:45 992

原创 Netty入门指南之NIO 粘包与半包

在之前的文章中,我们深入了解了NIO中的两个核心模块,Channel和Buffer,包括它们的结构、作用以及所解决的问题等。然而,虽然我们已经掌握了理论知识,但尚未经历实际的应用。在今天的这篇文章中,我们将以实战场景为例,探讨如何使用Channel和Buffer来解决一个常见的问题,即半包与粘包今天的文章介绍和解决了半包和粘包的区别,这部分需要对Channel和Buffer的读写有一定的基础,如果没有看明白就先看看前面的文章打好基础,为本篇和以后的文章打基础。

2023-11-09 18:48:44 310

原创 Netty入门指南之NIO Buffer详解

Channel和Buffer,更为重要的是Buffer,Channel只是建立通道的一个管道,Buffer是实际用来存储数据的。ByteBuffer是整个NIO体系中的核心组件,今天我们花了一篇文章的时间来深入学习它的结构、读写模式以及常见API等内容。这将为我们未来学习Netty奠定坚实的基础。

2023-11-08 20:00:00 273

原创 Netty入门指南之NIO Channel详解

从本篇文章开始,我们将深入学习NIO(非阻塞I/O)编程的相关内容,从头到尾详尽分析,包括Selector和Reactor模型,这将为我们后续学习Netty等更高层次的网络编程库打下坚实的基础。NIO编程的核心元素主要包括Channel和Buffer。NIO编程使用Channel来进行通信。在服务端,我们还引入了Selector选择器,它帮助我们主动监控客户端的Channel,确保这些Channel能够正常通信(即正常连接且没有阻塞)。

2023-11-07 20:37:49 344

原创 Netty入门指南之传统通信的问题

前一篇文章中,我学到了与Netty有关的基础知识,了解NIO这个非阻塞式IO,那今天我们来聊聊传统的网络通信开发方式以及它所存在的问题,也就是使用Socket的方式。Socket是阻塞式的IO,我们要做通信肯定得涉及多线程或者线程池的方式,这两种方式对于Socket都不友好,都有问题,如下详细分析一下。注意:由于我们平常开发都是面向Tomcat开发的,很少会有机会能够接触Socket编程。

2023-11-06 19:00:00 239 1

原创 Netty入门指南之基础介绍

Netty是一个异步事件驱动的网络应用框架。用于快速开发可维护的高性能协议服务器和客户端。Netty是一个NIO客户服务器框架,它能够快速和容易地开发网络应用,如协议服务器和客户端。它大大精简了网络编程,如TCP和UDP套接字服务器。快速和简单 "并不意味着开发出来的应用程序会出现可维护性或性能问题。Netty的设计是经过精心设计的,其经验来自于许多协议的实施,如FTPSMTPHTTP以及各种基于二进制和文本的遗留协议。

2023-10-19 18:50:09 424 2

原创 《孙哥说Spring5》笔记汇总

时隔两个多月,终于将的笔记文章全部整理完了,在这里做个汇总。孙哥的Spring课讲的非常好,深度和广度都有所兼顾,推荐大家去看。

2023-10-18 19:15:00 982 3

原创 Spring5应用之高级注解开发

在上一篇文章中,我们详细介绍了Spring2.x提供的一系列基础注解,并探讨了如何使用这些注解来简化开发。这些注解在Spring框架中的作用不可忽视,它们为开发者提供了更便捷的方式来管理组件、依赖注入以及其他关键方面的配置。本文将继续探讨Spring注解开发,更深入地了解这些强大的工具如何加速开发过程并提高代码质量。对于自定义数据类型,难免会遇到这种情况就是自定义类型的依赖注入,对于我们依赖方和被依赖方都使用@Bean的情况下,我们需要进行依赖注入应该怎么办?Spring会帮我们进行自动注入。

2023-10-17 19:00:00 318

原创 Spring5应用之基础注解开发

在之前的内容中,我们已经详细探讨了Spring的一些核心概念。从本篇开始,我们将转向更为现代和简洁的开发方式——注解开发。通过注解,我们能更加直观和简洁地定义和配置Spring组件,极大地提高开发效率。本文将详细介绍Spring框架中的基础注解以及与注解相关的核心概念注解编程是使用注解为代码添加元数据信息的一种编程方法。注解以@符号开始,如@Component。通过注解,我们可以为类、方法或变量提供额外的信息。这些信息可以被框架或库用来执行特定的操作或改变代码的行为。

2023-10-16 19:52:46 191 5

原创 Spring5应用之事务属性

在前两篇文章中,我们深入探索了Spring与MyBatis的整合技术,并详细讨论了Spring在事务处理方面的能力。今天,我决定进一步深入研究Spring,在事务属性上进一步的深入研究事务属性是用来描述事务特性的一组值。主要包括隔离属性传播属性只读属性超时属性和异常属性。通过这些属性,我们可以全面地描述和管理事务的行为经过上述详细的探讨,我们对Spring事务中的各项属性有了深入的了解。隔离属性:推荐使用默认值。传播属性:对于增删改操作,建议直接使用默认值,即REQUIRED。

2023-10-11 20:42:34 729

原创 Spring5应用之事务处理

上一篇文章的尾声,我们简要触及了“事务”这一重要概念。事务在数据库操作中扮演着至关重要的角色,确保数据的完整性与一致性。今天,我将带领大家进一步深入,系统性地探索Spring是如何进行事务管理和控制的。事务管理在Spring框架中占据着核心的位置,它为我们提供了强大而灵活的事务控制机制,无论是声明式还是编程式。为了让大家能够从中受益,我们会从事务的基本概念开始,然后深入到Spring的事务管理策略,以及如何在实际应用中恰当地使用这些策略。

2023-10-10 23:31:50 383

原创 Spring5应用之整合MyBatis

IOC和AOP,它们是Spring框架的基石。现在,我们即将开启一个新的篇章,那就是探索Spring5如何与各种持久层技术完美融合。持久层,顾名思义,是关于数据存储和管理的,它是应用程序中最为关键的部分之一。那么,为什么我们需要将Spring与持久层技术整合呢?首先,整合可以为我们提供一种统一的数据访问策略,使得数据的存储和检索变得更为简洁、高效。其次,通过整合,我们可以充分利用Spring的事务管理、依赖注入等特性,从而使数据操作更加安全和高效。

2023-10-09 20:29:08 537 1

原创 Spring5应用之AOP注解编程

在之前关于AOP的探讨中,我们主要依赖于Spring的XML配置来定义切入点、组装等关键组件。然而,随着开发趋势的演进,现代的应用更多地是基于SpringBoot构建的,并且对于AOP部分,注解方式已经成为了首选。在本篇中,我将引导大家探索如何仅通过注解轻松实现AOP编程在这篇文章中,我们深入探讨了如何在Spring框架中通过注解进行AOP编程。相比于传统的基于XML的配置方式,注解式AOP为开发者带来了更为直观和简洁的编程体验。

2023-10-07 16:44:20 148

原创 Spring5应用之Cglib动态代理

在上一篇文章中,我讲述了Spring动态代理底层具体实现之一的JDK动态代理,并在结尾抛出了本篇文章将要讲述的内容,本篇文章我将会着手于Spring动态代理底层具体实现的另一门技术之Cglib经过前两篇文章的深入探讨,我们对Spring动态代理的底层实现有了更为全面的了解。其中,JDK动态代理和Cglib动态代理是两种最为核心的技术手段。JDK动态代理以接口为核心,通过方法为我们提供了创建代理对象的能力,要求原始类必须实现某个接口。而Cglib动态代理则更为灵活,不受接口的限制。通过。

2023-10-05 18:28:21 219

原创 Spring5应用之JDK动态代理

在我们之前的探索中,已经详细解读了AOP如何借助动态字节码技术来构建动态代理类。实际上,实现动态代理的方式不止一种。其中,JDK动态代理CglibASM和Javassist都是业界常用的技术手段。今天,我将引导大家深入Spring AOP的底层原理,揭示其背后所采用的动态代理技术是如何工作的。为了更加系统地呈现这一内容,我特地选取了JDK动态代理与Cglib这两大主流方法,进行详实的解读。首先,我们将着重了解JDK动态代理的核心原理和实际应用情境。

2023-10-02 13:22:00 526

原创 Spring5应用之AOP概念详解

在之前的文章中,我们逐步揭示了静态代理AOP的动态代理额外功能以及切入点等关键概念。通过这些篇章,我们逐渐探究了AOP的四步编程方法,然而,对于AOP的整体概念,我们尚未完全涉猎。继之前的AOP实战经验后,从本篇开始,我将深入带领大家探索和理解AOP的核心思想,希望能助大家在面试或实际应用中更为自信,从众多候选者中脱颖而出经过本篇的深入探讨,我们更为清晰地理解了面向过程编程、面向对象编程以及面向切面编程这三大编程范式。

2023-10-01 12:41:15 184

原创 Spring5应用之AOP切入点详解

在前面的几篇文章里,我们已经探讨了AOP的四步编程以及Spring所提供的额外方法接口。今天,我们要探讨的是另一个核心概念——切入点。切入点决定了在何处插入这些额外的功能。但如之前文章所述,我们的切入点表达式相当粗糙,将额外的功能直接加入了所有类和方法中。这种做法明显不够精细,因为并不是每个原始方法都需要加入如日志、性能监测之类的额外功能本篇文章深入探讨了AOP中切入点的各个方面。在切入点表达式部分,我们详述了方法、类以及包的匹配方式。

2023-09-30 22:42:22 560

原创 Spring5应用之AOP额外功能详解

在之前的文章《Spring5应用之AOP动态代理开发》中,我为大家详细地介绍了如何通过四个简单的步骤来实现AOP动态代理的开发。原始类额外功能切入点和整合组装。其中,原始类的开发和整合组装是日常开发中较为常见的内容,因此我们不在此赘述从本篇文章开始,我会更深入地探讨额外功能和切入点的开发和应用。首先,我们会聚焦于“额外功能”的实现。为了实现这一目标,我们采用了实现MethodBeforeAdvice接口的方法。在接下来的内容中,我将为大家详细解读MethodBeforeAdvice接口。

2023-09-26 09:13:35 281 1

原创 Spring5应用之AOP动态代理开发

在上一篇文章:《Spring5应用之静态代理开发》中,我们详细地探讨了静态代理开发所面临的诸多问题,如代码冗余、维护困难等问题。为了克服这些问题,本文将引导大家深入了解Spring5的动态代理开发在今天的《Spring5之AOP动态代理开发》主题中,我并没有进行深入细致的AOP分析。不过,不用担心,接下来的系列文章中,我会逐步带领大家深入探讨Spring AOP的各个知识点,包括切入点表达式、MethodInterceptor、动态代理的底层实现原理等内容。

2023-09-24 14:16:34 563 2

原创 Spring5应用之静态代理开发

在之前的学习中,我们已经对AOP(面向切面编程)以及代理设计模式进行了初步的了解。今天,本篇文章将深入探讨静态代理的概念和实践。我们将一步一步地走进静态代理的实战应用,以确保对这一重要概念有个深入、全面的理解。

2023-09-21 18:36:12 430 4

原创 Spring5应用之代理设计模式

在之前的文章中,我们已经简要探讨了AOP背后的原理以及为何我们需要代理这一概念。在这篇文章中,我将深入探讨代理设计模式代理设计模式的核心思想是通过引入一个代理类,为原始类(也称为目标类)添加额外的功能或特性。这里所说的原始类,主要指的是专注于核心业务逻辑的业务类,它可能涉及核心的业务运算或是数据访问层(DAO)的运算。而“目标方法”则特指这些原始类中的具体方法。所谓的“额外功能”,可以是如日志记录、性能监测、事务控制等非核心业务逻辑。

2023-09-19 23:21:12 163

原创 Spring5应用之AOP需要代理

前面的内容主要深入探讨了Spring的工厂机制。AOP(面向切面编程)Spring融合了各种设计模式,其中,AOP主要采用了代理设计模式。在接下来的文章中,我将详细解释为什么AOP需要使用代理来实现其功能在之前的讨论中,我们了解到Service不仅要处理核心业务,还需要管理一些附加功能。但从软件设计的角度出发,我们期望Service层能够保持整洁和专注。为了实现这一目标,动态代理成为了一个理想的解决方案。然而,直接使用代理设计模式进行编码可能既复杂又不够直观,给开发者带来了挑战。

2023-09-18 23:36:33 445 1

原创 Spring5应用之BeanPostProcessor

在中文中可以翻译为“Bean后置处理器”,它用于对Spring框架创建的对象进行后续处理或加工BeanPostProcessor是Spring框架中的一个高级特性,它在Spring的底层实现中起到了关键作用。很多高级功能的封装都离不开这项技术。当我们后续深入探讨AOP(面向切面编程)时,会对其进行更深入的分析在Spring中,Bean的创建包括调用构造方法属性注入执行BeanPostProcessor的前置处理调用InitializingBean和自定义初始化方法,再经过。

2023-09-17 21:01:04 321

原创 Spring5应用之自定义类型转换器

在在我们之前的文章中,我们均采用spring配置文件进行开发。不知道大家是否注意到,配置文件里的依赖注入,除了引用类型外,基本都是字符串类型。但在bean对应的类中,却往往使用如Integer这样的类型。这背后是如何实现的呢?spring为我们提供了很多的类型转换器,比如简单类型转换器数组转换器集合类型转换器等等,但还是会有场景需要我们自己进行类型转换,如下String转Date类型开发步骤创建转换器类,实现Converter接口编写spring配置文件进行注册接口说明。

2023-09-13 21:11:29 242 1

原创 Spring5应用之配置文件参数化

在过去的项目开发中,我们主要采用SSM框架。尽管现在SpringBoot已经普及,但仍有许多老项目需要我们进行维护。如果我们将经常需要修改的配置信息都放置在中,对于我们开发人员来说虽然修改起来不难,但从运维角度看,这样的操作显得不太合适。因此,为了使配置更为模块化和易于管理,使用配置文件参数化

2023-09-12 23:01:24 229

原创 Spring5应用之生命周期

对象的生命周期指的是一个对象创建、存活和消亡的一个完整过程由于在使用Spring框架以后,我们的对象都交给了Spring进行管理,Spring为我们负责对象的创建、存活、销毁,了解生命周期有利于我们使用好Spring为我们创建的对象上面使用spring提供的接口去实现挺方便的

2023-09-11 21:58:43 340

原创 Dubbo3技术一套通之FASTJSON2序列化

我们深入探讨了如何利用 Dubbo 的强大能力,切换至 FST 序列化方案。而在本篇,我们将进一步拓展知识视野,携手走进FASTJSON2 序列化的实战应用。准备好,和我一起深入这个新的序列化冒险之旅吧!FASTJSON2是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库支持JSON/JSONB两种协议,JSONPath是一等公民支持全量解析和部分解析支持Java服务端、Android客户端、大数据场景FASTJAON性能很好,但是因为先前的安全漏洞。

2023-09-10 19:23:04 822

原创 Dubbo3技术一套通之FST序列化

在前一章节,我们深入探讨了如何利用 Dubbo 的强大能力,切换至 Kryo 序列化方案。而在本篇,我们将进一步拓展知识视野,携手走进 FST 序列化的实战应用。准备好,和我一起深入这个新的序列化冒险之旅吧!

2023-09-09 19:50:21 403 3

原创 Dubbo3技术一套通之Kryo序列化

前面文章讲解了Dubbo的网络通信的中的通信协议、通信方式与序列化的相关内容,半篇文章将实战带你学习Kryo序列化方式的使用上述便是将Dubbo 3程序替换Kryo序列化的详细使用方法,替换过程相对简单,只需要导入必要的依赖并稍作配置调整即可完成。然而,我们也需要从更深层次的角度来理解这一过程,例如Dubbo为序列化所保留的扩展槽位以及其可扩展性。

2023-09-08 20:52:46 596 1

原创 Dubbo3技术一套通之通信概述

在之前的文章中,我们对 Dubbo 进行了简要介绍并搭建了开发框架。从本文开始,我们将深入探讨 Dubbo 中的各种特性。今天,我们将重点介绍 Dubbo 在通信过程中可能涉及的一系列问题在网络通信中,通信协议和通信方式已经足够支持开发和使用。然而,协议中传输的数据是否能够以更高效的格式进行传输是一个关键问题。使用良好的数据传输格式可以显著减小数据体积,从而提高传输效率。举例来说,对于同样大小的50KB数据块,采用良好的传输格式可能只需要1KB,而采用不合适的格式可能需要100KB。

2023-09-07 21:22:01 670 1

原创 Dubbo3技术一套通之整合SpringBoot

前文中,我们使用了Spring配置文件来整合Dubbo进行直连开发,这让我们更直观地了解了Dubbo的RPC调用方式,摘掉它神秘的面纱,也为后面引入注册中心开发埋下伏笔,而不是只知道打个注解就能进行开发,出现问题不知如何解决。然而,在当今的主流开发中,我们通常使用Spring Boot作为脚手架来构建应用程序,这带来了更多便捷性和自动化特性。不再需要繁琐的配置,只需添加一些注解就能够使用Dubbo了。

2023-09-06 20:35:34 570

原创 Spring5应用之复杂对象创建

讨论什么是复杂对象前,先讨论什么是简单对象,简单对象就是可以直接通过new的方式进行创建的对象。所以不能够通过new创建的对象就是复杂对象,如下图所示。FactoryBean接口实例工厂静态工厂在处理复杂对象的依赖注入时,您可以根据业务需求选择使用Spring提供的FactoryBean接口、自己创建的实例工厂,或者静态工厂方法。静态工厂方法通常是对实例工厂的一种更简化的方式。您的选择应该取决于业务需求的复杂性和具体情况的分析。

2023-09-05 20:45:47 266

原创 Spring5应用之依赖注入

依赖注入是通过Spring容器以及配置文件,为所创建的对象(Bean)的成员变量赋值的过程下面这个示例,UserService依赖于UserDAO。UserDAO是我们自定义的类型,将会通过Set注入的方式来实现在未来的实际应用中,Set注入可能会更加常见。这主要是因为构造注入在处理重载构造函数时可能较为繁琐,容易出现参数数量和顺序的问题。另外,虽然Spring官方并未直接明确推荐使用Set注入,但实际上,其底层源码中却广泛地应用了Set注入的方式。

2023-08-22 14:31:36 194 4

原创 Spring5应用之日志整合

当今的软件开发中,日志管理已成为提高开发效率和问题定位的关键部分。在我最新的文章中,我深入探讨了如何在Spring框架中整合日志。从Spring的早期与commons-日志的结合,到最新的Spring5.x与log4j2和logback的紧密结合,我详细解读了整个整合过程。此外,文章还提供了如何在项目中引入log4j依赖和编写log4j.properties配置文件的实践指导。无论你是Spring新手还是资深开发者,这篇文章都将为你提供宝贵的知识和实践建议

2023-08-18 09:54:26 223 1

原创 Spring5应用之细节分析

Spring5应用之细节分析

2023-08-16 23:09:49 141

原创 Spring5应用之开发初探

Spring开发初探

2023-08-14 14:09:36 197

原创 Dubbo3技术一套通之直连开发初探

这些定义不仅为服务提供者所使用,也为服务消费者所依赖

2023-08-08 19:12:31 271

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除