随笔分类 - java
关于java语言的博客
摘要:在java中直接执行python语句 添加maven依赖 <dependency> <groupId>org.python</groupId> <artifactId>jython-standalone</artifactId> <version>2.7.1</version> </dependen
阅读全文
摘要:lambda表达式序列化后我们可以得到实现接口和实现方法的信息。 public class Client { public static void main(String[] args) { SerializedLambda serializedLambda = resolve(User::getU
阅读全文
摘要:介绍 ByteBuddy也是一个代码生成和操作的类库,可以在运行时动态创建和修改class,底层也是ASM库,相比于cglib,javassist,Bytebuddy在性能上具有优势,Hibernate的懒加载和mockito测试框架都使用到了Bytebuddy。官网 实现动态代理 maven依赖
阅读全文
摘要:介绍 Javassist 也是一个字节码框架,和其他字节码框架不同的是,它提供了两种层级的API,源层级和字节码层级,源层级不需要对字节码规则了解太多就可以操作。Hibernate的懒加载就使用到了Javassist。官网 使用Javassist提供的动态代理接口实现 maven依赖 <depend
阅读全文
摘要:介绍 cglib是一个强大的,受欢迎的,高性能的代码生成类库,它的底层就是asm(字节码框架),可以用来动态修改class和创建class,Spring AOP实现动态代理的一种方式就是cglib,hibernate使用cglib对持久化对象创建代理。 实现动态代理 引入maven依赖 <depen
阅读全文
摘要:介绍 ASM是一个java字节码操纵和分析框架,它可以直接以二进制的形式修改class或动态生成class。官网 使用 接下来我们使用asm框架实现一个和JDK动态代理同样的功能。 引入maven依赖 <dependency> <groupId>org.ow2.asm</groupId> <arti
阅读全文
摘要:介绍 代理是一种设计模式,提供了对目标对象另外的访问方式,通过代理对象来访问目标对象,这样可以扩展目标对象的功能,对目标对象功能做控制。 类图如下 静态代理 定义一个目标对象和代理对象都需要实现的接口 /** * 可以唱歌的 */ public interface Singable { /** *
阅读全文
摘要:本地变量类型推断 public class Client { public static void main(String[] args) { var name = "lisi"; System.out.println(name); List<String> names = Arrays.asLis
阅读全文
摘要:介绍 MapStruct是一个可以生成类型安全的,高性能的且无依赖的 JavaBean 映射代码的注解处理器,可以在编译期生成对应的mapping,既没有BeanUtils等工具使用反射的性能问题,又免去了自己写映射代码的繁琐。 使用 简单转换 maven依赖 <dependency> <group
阅读全文
摘要:今天使用IDEA导入一个maven项目的时候遇到了一个问题,idea报错 Unable to import maven project: See logs for details 经过上网查资料发现可以查看idea的详细日志, 错误日志如下 2 errors java.lang.RuntimeExc
阅读全文
摘要:今天想将项目的jdk版本从8升级到11,maven编译时遇到了下面的问题 错误日志 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile
阅读全文
摘要:加密结果直接转字符串 public class Client { // 加密算法 private static final String BLOWFISH = "Blowfish"; // 加密秘钥 private static final String SECRET = "test"; publi
阅读全文
摘要:lambda表达式 public class Client { public static void main(String[] args) { Arrays.asList("hello", "world").forEach(a -> { System.out.println(a); System.
阅读全文
摘要:介绍 序列化就是将对象转换成字节序列,反序列化就是将字节序列转换成对象。 使用 默认序列化和反序列化 public class Client { public static void main(String[] args) { User user = new User(); user.setUser
阅读全文
摘要:switch对字符串的支持 public class Client { public static void main(String[] args) { String name = "lisi"; switch (name) { case "lisi": System.out.println(nam
阅读全文
摘要:介绍 MethodHandler,翻译过来就是方法句柄,是java7提供的jsr292的一部分,为了支持动态方法的调用,主要是java.lang.invoke包。 使用 public class Client { public static void main(String[] args) thro
阅读全文
摘要:介绍 java5之前我们可以通过java提供的tools.jar来操作java编译器,java6提供了新的API,让我们可以更方便的调用。包名为javax.tools。 使用 通过文件编译 String filePath = "D:\\Client.java"; //获取java编译器 JavaCo
阅读全文
摘要:介绍 jdk1.6提供了对JavaScript的支持,使用的js引擎为Rhino,jdk1.8替换成了Nashorn。 使用 public class Client { public static void main(String[] args) throws IOException, Script
阅读全文
摘要:介绍 在JDK1.5以后,我们可以使用agent技术构建一个独立于应用程序的代理程序(即为Agent),用来协助监测、运行甚至替换其他JVM上的程序。使用它可以实现虚拟机级别的AOP功能。Agent分为两种,一种是在主程序之前运行的Agent,一种是在主程序之后运行的Agent(前者的升级版,1.6
阅读全文
摘要:介绍 JavaPoet 是一个用来生成 .java源文件的Java API。 使用 maven依赖 <dependency> <groupId>com.squareup</groupId> <artifactId>javapoet</artifactId> <version>1.11.1</vers
阅读全文