![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
技术
文章平均质量分 92
gutou__yu
这个作者很懒,什么都没留下…
展开
-
Spring Boot 的自动配置是如何实现的?
Spring Boot 自动配置的原理SpringBoot 使用起来非常方便,核心就在于自动配置,接下来分析一下SpringBoot自动配置的实现原理。(2.4.1)@SpringBootApplication这是 SpringBoot 主类上的注解,来看一下它的源码:@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@Ena原创 2021-01-13 17:22:35 · 256 阅读 · 0 评论 -
一篇文章学会 Gradle !
Gradle构建工具的作用依赖管理测试、打包、发布与 Maven 的区别Gradle 在 Maven 的基础上使用 Groovy 来管理构建脚本,而不是 XML。简洁。配置 POM 太繁琐灵活。Groovy,可以使用 task。Groovy 语法必须要懂这些最基本的:可选的类型定义def version = 1assertassert version == 2括号是可选的println version字符串def s1 =‘imooc’ 仅仅是字符原创 2020-11-11 11:38:11 · 324 阅读 · 0 评论 -
从零实现一个RPC框架(七)- CompletableFuture
CompletableFuture在rpc框架中用到了 CompletableFuture,所以这篇文章主要讲一下 CompletableFuture。FutureCompletableFuture 是1.8引入的。public class CompletableFuture<T> implements Future<T>, CompletionStage<T>Completable 实现了 Future 接口和 CompletionStage接口。Futu原创 2020-09-23 17:55:47 · 332 阅读 · 0 评论 -
从零实现一个RPC框架(五)- 客户端代理调用
客户端代理调用因为服务在远程,所以想要让客户端像调用本地服务一样地调用远程服务,需要使用动态代理。关于动态代理,可以看我的另一篇文章:Java动态代理 这里不再赘述。代码实现 RpcClientProxy rpcClientProxy = new RpcClientProxy(rpcClient, rpcServiceProperties); // 拿到了 HelloService 接口的代理对象 HelloService helloService = rpcClientPro原创 2020-09-23 16:47:24 · 206 阅读 · 0 评论 -
Java反射(五) - 动态代理
# 动态代理可以在运行期动态创建某个 interface 的实例。首先我们先来看看我们平时如何静态的创建实例:定义接口:public interface Hello { void morning(String name);}编写实现类:public class HelloWorld implements Hello { public void morning(String name) { System.out.println("Good morning, "转载 2020-09-23 16:24:23 · 261 阅读 · 0 评论 -
Java反射(五) - 获取继承关系
获取继承关系获取父类的Class有了 Class 实例,我们还可以获取它的父类的 Class:public class Main { public static void main(String[] args) throws Exception { Class i = Integer.class; Class n = i.getSuperclass(); System.out.Println(n); Class o = n.getSup转载 2020-09-23 14:35:20 · 887 阅读 · 0 评论 -
Java反射(四) - 调用构造方法
调用构造方法我们通常使用 new 操作符创建新的实例:Person p = new Person();如果通过反射来创建新的实例,可以调用 Class 提供的 newInstance() 方法:Person p = Person.class.newInstance();调用Class.newInstance()的局限是,它只能调用该类的public无参数构造方法。如果构造方法带有参数,或者不是public,就无法直接通过Class.newInstance()来调用。为了调用任意的构造方法,转载 2020-09-23 14:18:07 · 475 阅读 · 0 评论 -
Java反射(三) - 调用方法
调用方法我们可以通过Class实例获取所有的Method信息。Class类提供了以下几个方法来获取Method:Method getMethod(name, Class...):获取某个public的Method(包括父类)Method getDeclaredMethod(name, Class...):获取当前类的某个Method(不包括父类)Method[] getMethods():获取所有public的Method(包括父类)Method[] getDeclaredMethods():转载 2020-09-23 14:05:23 · 179 阅读 · 0 评论 -
Java反射(二) - 访问字段
访问字段对于任意一个Object实例,只要我们获取了它的Class,就可以获取它的一切信息。Class 类提供了以下几个方法来获取字段:Field getField(name):根据字段名获取某个public的field(包括父类)Field getDeclaredField(name):根据字段名获取当前类的某个field(不包括父类)Field[] getFields():获取所有public的field(包括父类)Field[] getDeclaredFields():获取当前类的所有f转载 2020-09-23 11:42:16 · 263 阅读 · 0 评论 -
Java反射(一) - Class类
反射什么是反射?Java的反射是指程序在运行期可以拿到一个对象的所有信息。目的是为了什么?反射是为了解决在运行期,对某个实例一无所知的情况下,如何调用其方法。Class类学习反射,首先要学习Class类。除了int等基本类型以外,Java的所有其他类型全部都是class(包括interface)。class是由JVM在执行过程中动态加载的。JVM在第一次读取到一种class类型时,将其加载进内存。每加载一种class,JVM就为其创建一个 Class 类型的实例,并关联起来。public转载 2020-09-23 10:41:08 · 131 阅读 · 0 评论 -
从零实现一个RPC框架(四)- Netty服务端Handler
Netty服务端Handler在 Netty 配置服务端时,添加的真正处理业务逻辑的 NettyServerHandler 。概述NettyServerHandler 继承 ChannelInboundHandlerAdapter,覆写 channelRead、userEventTriggered、exceptionCaught三个方法。channelRead :处理接收到的数据,调用本地服务,并将结果发送会客户端。userEventTriggered:对Netty心跳检测时间进行处理,读超时的话原创 2020-09-22 17:16:38 · 448 阅读 · 0 评论 -
从零实现一个RPC框架(三)- ThreadLocal详解
ThreadLocal概述ThreadLocal和Synchronized都是为了解决多线程中相同变量的访问冲突问题,不同的点是:synchronized 是通过线程,牺牲时间来解决访问冲突TreadLocal 是通过每个线程单独一份存储空间,牺牲空间来解决冲突,并且相比于 synchronized ,ThreadLocal 具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外不能访问到想要的值。当某些数据是以线程为作用域并且不同线程具有不同的数据副本的时候,就可以考虑采用Threa原创 2020-09-22 15:40:50 · 358 阅读 · 0 评论 -
从零实现一个RPC框架(二) - 编、解码器
文章目录编、解码器kryo编、解码器kryo“Kryo 一般只用来进行序列化(然后作为缓存,或者落地到存储设备之中)、反序列化,而不用于在多个系统、甚至多种语言间进行数据交换 —— 目前 kryo 也只有 java 实现。”Reading and writing(读与写)Kryo有三组读写对象的方法。// 1. 如果不知道对象的具体类,且对象可以为null: kryo.writeClassAndObject(output, object);// ...Object object =原创 2020-09-22 15:39:43 · 133 阅读 · 0 评论 -
从零实现一个RPC框架(一)
文章目录从零实现一个RPC框架(一)架构工作流程技术选型项目骨架一、先搭Netty客户端和服务端从零实现一个RPC框架(一)仿照Dubbo,自己实现一个RPC框架。文章中只包含部分示例代码,完全代码请移步我的github:RPC框架的github地址架构工作流程服务端将服务注册到注册中心并且在服务端监听客户端请求。客户端在消费中心拿到服务,远程调用服务(发送一个request给服务端)。服务端根据request,调用对应的服务并将结果返回给客户端。客户端接收response,结束调用原创 2020-09-22 14:57:30 · 220 阅读 · 0 评论 -
List 接口的 toArray方法详解
List 转 Array有两个方法,下面分别介绍。Object[] toArray()用法很简单。返回一个Object类型的新建数组,大小和顺序与List相同。 T[] toArray(T[] a)传入一个同类型的数组,返回一个数组。那么传入的数组要多大呢?返回的数组也是新建的吗?查询java api:Returns an array containing all of the elements in this list in proper sequence (from first t原创 2020-08-03 11:53:18 · 355 阅读 · 0 评论 -
Mybatis中的 useGeneratedKeys
useGeneratedKeys 用法探究useGeneratedKeys的用法官方文档useGeneratedKeys (仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。首先,如果你的数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),那么你可以设置 use原创 2020-07-24 15:34:59 · 6337 阅读 · 0 评论