动态代理技术在Java中有着非常广泛的应用,我再阅读Spring源码的时候多次碰到对这种技术的使用,在这篇文章做个总结。 代理模式 首先介绍下什么是代理模式:代理模式给某一个对象提供一个代理,并由代理对象来控制对真实对象的访问。代理模式是一种结构型设计模式。 在代理模式中,我们把角色分为 3 种: Subject(抽象主题角色):定义代理类和真实主…
1、多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然",只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法: (1)发挥多核CPU的优势 随着工业的进步,…
文章只讨论实现,具体原理可以参考官方网站 当我们的数据库或者表太大时,需要进行数据分片(分库或者分表),本文在此记录下使用springboot+ShardingSphere进行最简单的数据分片。 引入maven依赖 <dependency> <groupId>org.apache.shardingsphere</gro…
我们在写Java代码时,最长遇到的异常就是:NullPointerException。大量的null值的检测,降低了代码的可读性,而随时可能发生的NullPointerException降低了程序的健壮性。在Java 8中引入了Optional类,就是为了解决这样的问题,那么Optional怎么用? Optional类 A container ob…
在项目开发中,我们经常遇到与嵌入式进行通信的情况,而由于一些嵌入式设备的处理能力较差,往往以二进制的数据流的形式传输数据,在此将这些常见的转换做一总结。 注意:默认传输时使用小端模式 字节流转换为int类型数据 public static int getInt(byte[] bytes) { return (0xff & bytes[0])…
实现原理 Spring内置了一个AbstractRoutingDataSource类,它可以把多个数据源配置成一个Map,然后根据不同的key返回不同的数据源(通过实现抽象方法determineCurrentLookupKey)。 我们在使用AbstractRoutingDataSource时,主要涉及两个操作: 生成数据源相关map,并赋值给Ab…
ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量。 这个类有什么作用,或者说为什么要有这么一个类呢?先解释一下,在并发编程的时候,成员变量如果不做任何处理其实是不安全的,各个线程都在操作同一个变量,显然是不行的,并且我们也知道volatile这个关键字也是不能保证线程安全的。那么在有一种情况之下,我们需要满足这样一个条件:变量是同…
注解的分类 Java注解一共分为3大类: JDK自带注解元注解自定义注解 JDK注解 JDK注解的注解,就5个: @Override 用来标识重写方法 @Deprecated标记就表明这个方法已经过时了,但我就要用,别提示我过期 @SuppressWarnings("deprecation") 忽略警告 @SafeVarargs jdk1.7出现,…