JAVA全系列 教程
3762个小节阅读:7094.8k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
Cglig是基于继承的,是第三方提供的技术,需要导入jar包,并且。
xxxxxxxxxx
<dependencies>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies>
创建房东类
xxxxxxxxxx
public class Fangdong {
public void bigHouse(){
System.out.println("大房子");
}
}
创建中介类
xxxxxxxxxx
public class Zhongjie implements MethodInterceptor {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("带看");
// 注意方法,是invokeSuper,不是invoke
Object result = methodProxy.invokeSuper(o, objects);
System.out.println("收中介费");
return result;
}
}
创建客户类
xxxxxxxxxx
public class Kehu {
public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Fangdong.class);// 代理对象为Fangdong的子类
enhancer.setCallback(new Zhongjie());// 负责处理调用的
Fangdong fangdong = (Fangdong) enhancer.create();// 创建代理对象
fangdong.bigHouse();
}
}
测试结果,发现出现异常,这是因为Java 17版本中的Java Platform Module System(java 9就开始有了)引起的,特别是强封装的实现。
xxxxxxxxxx
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @1376c05c
把代码原封不动的放在Java 11的环境中就可以使用。
xxxxxxxxxx
--add-opens java.base/java.lang=ALL-UNNAMED