1. 数据库 数据库是一个庞大的服务器软件,用来管理数据。
1. jackson简介 Jackson 是一个流行的 Java 序列化和反序列化库,通常用于处理 JSON 数据。关于 Jackson 会不会导致栈内存溢出的问题,一般情况下并不会,因为 Jackson 库本身不会直接导致栈内存溢出。
1. fastJson简介 1.1 什么是fastJson? fastJson是alibaba的一个针对json的开源类库。 其中提供了json字符串和java对象之间的各种转换方式。 fastJson效率极高。
1. 初探json 1.1 什么是json? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。 JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET,java等)编程语言都支持JSON。
玩转java注解 关于注解,下面的几个问题你都会吗? 注解是干嘛的? 同一个注解可以使用很多次吗?如果可以,怎么使用? @Inherited注解是干什么用的? @Target注解中的“TYPE_PARAMETER”和“TYPE_USE”用在什么地方啊? 泛型你了解吧,泛型中如何使用注解? 注解的定义可以实现继承吗? spring对注解有增强吗?@Aliasfor注解是干嘛的? 1. java注解的定义和本质 我们都了解代码中的注释,注释是给开发人员看的,可能是开发者自己写的给自己看,也可能是给同组其他同事看的。 代码中的注释可以提升代码的可读性和可维护性,但是对于java编译器和java虚拟机来说注释是没有意义的,编译后的class字节码文件中是没有注释信息的。 注解和注释有点类似,唯一的区别就是注释是给人看的,而注解是给java编译器和java虚拟机看的。编译器和虚拟机在运行过程中可以获取注解信息,然后根据这些信息做各种想做的事。 比如:@Override注解我们都了解。加载方法上,标注当前方法重写了父类的方法,当编译器编译代码时,会对@Override标注的方法进行验证,验证其父类中是否存在相同签名的方法,否则报错。 总结就是:注解本身是对代码的增强,可以在代码编译或者运行期间获取注解的信息,然后根据这些信息做各种牛掰的事。
1. 什么是cglib代理? 1.1 初识cglib jdk动态代理因为生成的代理类默认继承了Proxy类,因此它只能为接口生成代理类,使用上有局限性。 真正使用中我们的类不一定都有接口,大多数可能就是一个普通的class。此时如果我们想为一个普通类创建动态代理类,就需要使用cglib来实现了。 cglib是一个强大、高性能的字节码生成库,它用于在运行时扩展Java类和实现接口。 cglib的本质是通过动态的在内存中生成一个子类来覆盖所要代理的类(非final的类和方法)。 Enhancer可能是cglib中最常用的一个类,和jdk中的Proxy不同,Enhancer既能为普通类生成代理,也能够为接口生成代理。 Enhancer负责创建一个被代理类(真实主题类)的子类并且拦截对真实主题类的所有方法调用(包括从Object继承而来的非final、非static方法)。 Enhancer不能代理final方法、不能代理private方法、不能代理static方法,因为基于java final的语义,这些方法都不能被覆盖。 基于同样的道理,Enhancer也不能对final类进行代理。
1. 代理的初衷 1.1 代理出现的背景 一个真实主题对象用来实现核心业务,真实主题不想暴露给客户端,这时候就需要代理主题对象上场了。 代理主题持有某一类真实主题的引用(通过多态持有),当客户端访问代理主题时,代理主题将请求委托给真实主题处理,同时在委托的过程中,代理主题可以加入自己的某些逻辑。 说白了就是,代理主题对真实主题进行代理,有啥事情直接找代理,边缘业务代理直接就办了,核心业务再转发给真实主题去处理。 这里面的核心就是:转发。 只有能将请求转发给真实主题,这才是正确的处理,否则,对真实主题的代理就失败了。 同样,只有在转发的过程中,才能通过代理主题去处理某些边缘业务,以此来增强真实主题对象的功能,否则,没有转发就谈不上边缘业务了。 那如何实现转发呢?之前的文章已经讲过,此处再回顾下如何实现转发: A对象封装一个B对象的属性成员,在使用时,从外部向A对象中注入B对象实例(以成员变量的方式注入); 外部在调用A对象的a方法时,通过方法间参数传递,注入一个局部的B对象实例进去,相当于让A对象持有了一个局部的B对象实例(以局部变量的方式注入)。 也就是说,通过委托机制就可以实现方法转发。 比如A访问B,现在想把请求转发到C,此时在B中委托一个C的对象即可,B就可以将请求转发给C。
1. 回顾Proxy类 Proxy类是反射包中提供的,用于为真实主题生成代理对象。 Proxy对外提供了4个常见API。
1. 回顾动态代理 jdk的动态代理中关键核心就在于一个Proxy类。这个类是jdk提供的内置类。这个类能干嘛? 前面学习反射机制、和java中常见机制时,曾经反复强调两个动态性的概念:动态加载和静态加载、动态字节码和静态字节码。在这个我们首先通过Proxy类来直观的感受下到底什么叫做动态字节码机制? 学习动态字节码机制时,核心的一点就是字节码的生成过程是在一个正在运行当中的JVM中动态进行的,生成的字节码是在JVM内存中虚拟缓存的,而不是java编译器预编译后产生的*.class文件。那么具体怎么样呢? Proxy类我们分为两节来学习,本节先学习Proxy对外暴露的4个API。
1. 代理设计模式 代理设计模式是Java中针对接口编程的一种应用模式。 java中代理分为静态代理和动态代理。 一个接口有很多实现类,其中包括真实主题实现类,和代理主题实现类。真实主题实现类执行真正的核心业务,代理主题实现类负责边缘业务。 代理设计模式的核心:外部通过操作代理主题,间接的操作真实主题。 代理设计模式中,代理主题实际上是个代理对象,通过委托真实主题去执行真正的操作,而代理主题本身可以在委托真实主题执行前后执行其他边缘性业务。 在代理设计模式中,外部直接操作代理主题,真实主题是被代理类委托代理的,即代理类代理了真实主题,代理类委托真实主题处理真正业务。 代理设计模式本身是对委托机制的一种具体应用场景,它是对委托机制和方法转发的一种模式化应用。 代理设计模式实现上和装饰者设计模式比较相似,但还是有区别的,区别等学习装饰者模式时再讲。
个人独立开发项目,基于springboot 3.x starter机制提供插拔式的插件功能
基于芋道最新源码二次开发