<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[String小四的博客]]></title><description><![CDATA[不忘仰望星空，不忘脚踏实地~]]></description><link>https://blog.youkuaiyun.com/m0_37258694</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; m0_37258694]]></copyright><item><title><![CDATA[java源码分析-注解AnnotatedElement接口]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/114551096</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/114551096</guid><author>m0_37258694</author><pubDate>Sun, 10 Oct 2021 08:49:48 +0800</pubDate><description><![CDATA[java源码分析-注解AnnotatedElement接口
概述
在我们讲解注解的运行时处理器时写过这样一段代码：
 //通过Class对象拿到getPersonInfo方法对象Method
Method method = clazz.getDeclaredMethod("getPersonInfo", null);
System.out.println(method.getName());
//根据Method获取到该方法上的注解
MyPersonAnnotation declaredAnnotation]]></description><category></category></item><item><title><![CDATA[java源码分析-反射SecurityManager类]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/113056164</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/113056164</guid><author>m0_37258694</author><pubDate>Tue, 06 Jul 2021 07:30:47 +0800</pubDate><description><![CDATA[java反射源码分析-SecurityManager
其实SecurityManager类并不是反射相关类图中的一员，但是在我们查看反射源码时经常看到如下的代码：
checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);

...
    
private void checkMemberAccess(int which, Class&lt;?&gt; caller, boolean checkProxyInterfaces) ]]></description><category></category></item><item><title><![CDATA[java源码分析-反射Constructor类]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/113055513</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/113055513</guid><author>m0_37258694</author><pubDate>Thu, 10 Jun 2021 07:53:42 +0800</pubDate><description><![CDATA[java反射源码分析-Constructor
1.是什么？
​	Constructor是java反射时用于表示构造函数的抽象，它包含一个类的构造函数的相关信息。java中一切都是对象，那么每一个构造函数也是一个对象，把这写构造函数抽象出来，就是Constructor类。

public final class Constructor&lt;T&gt; extends Executable 

Executable：它是Method和Constructor的公共基类。它继承了AccessibleObject类]]></description><category></category></item><item><title><![CDATA[java源码分析-反射Method类]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/113055952</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/113055952</guid><author>m0_37258694</author><pubDate>Tue, 08 Jun 2021 15:31:59 +0800</pubDate><description><![CDATA[java反射源码分析-Method
1.是什么
​	Method类提供有关类或接口上单个方法的信息和访问权限。Method反映的方法可以是类上的实力方法或者是静态方法也可以是接口上的抽象方法。
public final class Method extends Executable


通过类图，可以看到Executable类是Mehod的父类。实际上它是Method和Constructor的公共基类。
2.如果获取
有以下集中方法可以获取到Method类：
2.1获取所有的方法
通过Class类的getD]]></description><category></category></item><item><title><![CDATA[java源码分析-反射Class类]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/113055258</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/113055258</guid><author>m0_37258694</author><pubDate>Thu, 03 Jun 2021 09:34:09 +0800</pubDate><description><![CDATA[java反射源码分析-Class类
1.Class类是什么
​	Class本质上也是java的一个类，这个类是对java所有的类的相关信息进行提取和抽象。简单说，Class类就表示创建类的类型信息。Class类的对象能够在允许时提供某个类对象的类型信息，包含了对构造函数、方法、变量等一系列操作。
public final class Class&lt;T&gt; implements java.io.Serializable,
                              GenericDec]]></description><category></category></item><item><title><![CDATA[java源码分析-运行期注解处理器]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/114446875</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/114446875</guid><author>m0_37258694</author><pubDate>Thu, 06 May 2021 19:19:46 +0800</pubDate><description><![CDATA[java源码分析-详说注解处理器
上一篇《java源码分析-注解基本原理》中我们了解了注解的一些基本概念和基本原理，在文章最后也点了一下注解处理器，当时我说注解在使用时实际上是通过反射拿到注解信息，其实不是完全正确的。本篇，我们就来详细讨论一下注解处理器。
1.注解处理器
​	注解处理器顾名思义，就是用来处理注解信息的，如果没有注解处理器，那么注解其实和注释是没有多大的区别。真是因为注解处理器的存在，才使得注解能够发挥起作用。那么java到底是怎么实现？Java的注解处理一般分为2种，最常见也是最显式化的就]]></description><category></category></item><item><title><![CDATA[java源码分析-编译期注解处理器]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/114546074</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/114546074</guid><author>m0_37258694</author><pubDate>Wed, 21 Apr 2021 07:42:26 +0800</pubDate><description><![CDATA[java源码分析-编译期注解处理器
上一篇我们把运行时注解处理器的原理大致分析了一遍，本片我们来讨论一下编译期注解处理器的底层实现。
1.Annotation Processing Tool
1.1概述
​	Java编译期注解处理器，Annotation Processing Tool，简称APT，是Java提供给开发者的用于在编译期对注解进行处理的一系列API，这类API的使用被广泛的用于各种框架，如dubbo,lombok等。
​	Annotation Processing Tool注解处理器是 jav]]></description><category></category></item><item><title><![CDATA[java源码分析-注解基本原理]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/114334525</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/114334525</guid><author>m0_37258694</author><pubDate>Sat, 17 Apr 2021 11:25:01 +0800</pubDate><description><![CDATA[java源码分析-注解基本原理
​	java注解在实际工作中经常彭代，无论是java内置注解还是框架自带注解，在我们使用这些注解的时候是否思考过这些注解到底是什么作用？是怎么起作用的？java以及框架是怎么识别这些注解的？本篇我们就来聊一聊注解的基本原理。
1.注解是什么
​	其实注解在大多数情况下与普通的修饰符(public,void,static等)在使用方式上并没有多大区别。我们先来看个例子：
public class AnnotationDemo {

    @Override
    publi]]></description><category></category></item><item><title><![CDATA[java源码分析-内部类]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/114948354</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/114948354</guid><author>m0_37258694</author><pubDate>Sun, 28 Mar 2021 17:41:30 +0800</pubDate><description><![CDATA[java源码分析-内部类
​	在我们学习源码的时候经常会看见内部类，本片我们就来详细了解一下内部类的底层原理。
什么是内部类
​	什么叫内部类？通俗的说，内部类就是定义在一个类的内部的类。内部类本身其实也是一个类的属性，定义方式也是非常类似。举个例子：
public class OuterClass1 {

    class InnerClass{

        public void name(){
            System.out.println("InnerClass.");
   ]]></description><category></category></item><item><title><![CDATA[java源码分析-String类不可变性讨论]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/114181153</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/114181153</guid><author>m0_37258694</author><pubDate>Wed, 17 Mar 2021 20:34:35 +0800</pubDate><description><![CDATA[java源码分析-String类不可变性讨论
在很多面试过程中，有一个经常被问到的问题，请你谈一谈String对象为什么说是不可变的？
也许你会说，因为它被final修饰了，所以不可变。如果你这样回答，那么只能说，还是太年轻了。今天我们就好好讨论一下String对象的不可变性。
1.不可变对象
​	要聊String对象的不可变性，我们先要搞明白什么是不可变对象？不可变对象，顾名思义，对象在创建之后对象就不能在改变了。
对象的状态
​	对象的状态指的是存储在状态变量中的数据（状态变量包括实例或者静态域），还包]]></description><category></category></item><item><title><![CDATA[java源码分析-String类源码概要]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/114003618</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/114003618</guid><author>m0_37258694</author><pubDate>Tue, 16 Mar 2021 07:11:12 +0800</pubDate><description><![CDATA[java源码分析-String类源码概要
1.简介
​	String类是我们java程序员使用频率非常大的类，我们都知道String类是不可变类，一旦定义就不可改变，那么它为什么不可变呢？它的内部做了什么处理呢？今天我们就好好研究一下String类。
先上源码：
public final class String
    implements java.io.Serializable, Comparable&lt;String&gt;, CharSequence

通过上面我们能知道：

String类被f]]></description><category></category></item><item><title><![CDATA[java源码分析-基本类型和包装类]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/113307610</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/113307610</guid><author>m0_37258694</author><pubDate>Sat, 06 Mar 2021 15:47:42 +0800</pubDate><description><![CDATA[java源码分析-基本类型和包装类
1.类型、值和变量
​	java是一种静态类型语言，每个变量和表达式都在编译期就确定了类型。
​	java还是一种强类型语言，类型的确定就限定了类该类型变量的值或者表达式返回值的类型。
1.1基本类型和引用类型
​	java语言的类型分为两种：基本类型和引用类型；


基本类型包括布尔类型boolean和数字类型，其中数字类型包括整数类型byte、short、char、int和long以及浮点数类型float和double。


引用类型包括类类型、接口类型和数组类型，另]]></description><category></category></item><item><title><![CDATA[java源码分析-Integer类]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/113197622</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/113197622</guid><author>m0_37258694</author><pubDate>Thu, 04 Mar 2021 20:55:46 +0800</pubDate><description><![CDATA[java源码-Integer类
本篇我们来深入了解一下基本数据类型的包装类Integer。
1.构造函数
public Integer(int value) {
    this.value = value;
}

public Integer(String s) throws NumberFormatException {
    this.value = parseInt(s, 10);
}

通过传入一个int值来构造Integer对象；
通过传入一个数值类型的字符串来构造一个Integer对象。
2]]></description><category></category></item><item><title><![CDATA[java源码分析-native方法的调用]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/113528815</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/113528815</guid><author>m0_37258694</author><pubDate>Tue, 02 Mar 2021 22:26:41 +0800</pubDate><description><![CDATA[java源码分析-native方法的调用
​	这段时间在分析java源码时，经常能看到很多的底层源码中都调用了被native关键字修饰的方法，也就是java调用本地方法。但是在进行debug时有进不去，看不了具体的实现。因为这写方法是用c/c++实现的，那么这对我们分析源码就有了很多的阻碍，这些方法就像黑盒一样。于是我就在想，java是怎么调用这些本地方法的呢？接下来我们就一步步的探究一下这其中的原理。
那么这一篇我们就来自己来通过java实现native方法的调用。
1.什么是native方法
​	nat]]></description><category></category></item><item><title><![CDATA[java源码分析-Object类wait/notify]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/113663661</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/113663661</guid><author>m0_37258694</author><pubDate>Sun, 28 Feb 2021 08:46:27 +0800</pubDate><description><![CDATA[java源码分析-Object类wait/notify
​	前面我们简单的把Object类的源码浏览了一遍，但是也只是简单的看了一下，没有深入学习。Object类作为java中所有类的基类，其重要性不言而喻。本片我们就来详细了解一下Object类中的wait方法和notify方法。
源码：
public final void wait() throws InterruptedException {
    wait(0);
}

public final native void wait(long time]]></description><category></category></item><item><title><![CDATA[java源码分析-Object类clone方法]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/113864711</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/113864711</guid><author>m0_37258694</author><pubDate>Sat, 27 Feb 2021 14:53:19 +0800</pubDate><description><![CDATA[java源码分析-Object类clone方法
先看一下源码：
/**
     * Creates and returns a copy of this object.  The precise meaning
     * of "copy" may depend on the class of the object. The general
     * intent is that, for any object {@code x}, the expression:
     * &lt;block]]></description><category></category></item><item><title><![CDATA[java源码分析-Object类]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/113617518</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/113617518</guid><author>m0_37258694</author><pubDate>Thu, 25 Feb 2021 07:29:07 +0800</pubDate><description><![CDATA[java源码分析-Object类
Object类是类层次结构中的根类，每个类都使用它作为父类（超类），所有的对象(包括数组)都实现了这个类中的方法。
1.静态代码块
private static native void registerNatives();
static {
    registerNatives();
}

将对象加载到内存时，首先执行静态代码块，执行registerNatives方法。这个方法的作用就是将Object类中其他的本地方法都机械能注册，方便java程序调用native方法时对]]></description><category></category></item><item><title><![CDATA[Idea搭建JDK8源码环境]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/113870843</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/113870843</guid><author>m0_37258694</author><pubDate>Tue, 23 Feb 2021 21:36:45 +0800</pubDate><description><![CDATA[Idea搭建JDK8源码环境
1.准备
IDE：IntelliJ IDEA
jdk：oracle JDK8
​	下载：http://www.oracle.com/technetwork/java/javase/downloads/index.html
​	在JDK8的安装路径下找到src.zip压缩包，这就是我们需要的源码。

2.搭建步骤
2.1新建项目
在Idea中，新建简单的java project，如下：




2.2添加源码
首先将JDK8的源码src.zip解压，然后将解压后的src目录下的所]]></description><category></category></item><item><title><![CDATA[Sharding-JDBC入门]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/113446886</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/113446886</guid><author>m0_37258694</author><pubDate>Sat, 30 Jan 2021 21:31:21 +0800</pubDate><description><![CDATA[Sharding-JDBC入门
​	最近在做一个java后台重构项目时碰到了一个问题，就是系统的数据量越来越大，单表的压力剧增，已经不能满足正常的数据操作了。这个时候就需要有分库分表的处理了，由于资源和业务限制，最终只选择了分表。本来想着分表简单，对数据入库和索引时添加逻辑判断，选择对应表处理就完事了，结果项目里有位老哥说了，我们可以尝试用Sharding-JDBC做分表。这突然引起了我的兴趣，于是乎边开始研究一下Sharding-JDBC了。
​	本片主要是对Sharding-JDBC做一个入门，想要深入]]></description><category></category></item><item><title><![CDATA[Spring Security入门学习]]></title><link>https://blog.youkuaiyun.com/m0_37258694/article/details/112744957</link><guid>https://blog.youkuaiyun.com/m0_37258694/article/details/112744957</guid><author>m0_37258694</author><pubDate>Sun, 17 Jan 2021 14:56:20 +0800</pubDate><description><![CDATA[Spring Security入门学习**
1.Spring Security概述
Spring Security 是 Spring 家族中的一个安全管理框架，实际上，在 Spring Boot 出现之前，Spring Security 就已经发展了多年了，但是使用的并不多，安全管理这个领域，一直是 Shiro 的天下。
相对于 Shiro，在 SSM/SSH 中整合 Spring Security 都是比较麻烦的操作，所以，Spring Security 虽然功能比 Shiro 强大，但是使用反而没有 S]]></description><category></category></item></channel></rss>