Java动态代理和CGLIB代理
来源:互联网 发布:七月算法tensorflow 编辑:程序博客网 时间:2024/06/05 08:42
Java动态代理
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
/** * HelloWorld.java */public interface HelloWorld { public int say(String words);}/** * HelloWorldImplements.java */public class HelloWorldImplements implements HelloWorld { public int say(String words) { System.out.println("I am saying:"+words); return 1; }}/** * HelloWorldHandler.java */public class HelloWorldHandler implements InvocationHandler { Object target; public HelloWorldHandler(Object target) { super(); this.target = target; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before"); Object result=method.invoke(target,args); System.out.println("after"); return result; }}/** * Main.java */public class Main { public static void main(String[] args) { HelleWorld helleWorld = new HelloWorldImplements(); HelloWorldHandler helloWorldHandler = new HelloWorldHandler(helleWorld); //HelleWorld proxy =(HelleWorld) Proxy.newProxyInstance(HelleWorld.class.getClassLoader(), HelloWorldImplements.class.getInterfaces(), helloWorldHandler); HelleWorld proxy = (HelleWorld) Proxy.newProxyInstance(helleWorld.getClass().getClassLoader(), new Class[]{HelleWorld.class}, helloWorldHandler); proxy.say("fuck the world"); }
JDK动态代理和CGLib动态代理的区别
- jdk动态代理的对象需要实现一个接口,不能对类直接进行代理
- CGLIB可以对类进行代理,基于继承去生成一个子类,在子类里对父类的方法进行覆盖,所以最好不要用final修饰方法
- CGLIB的性能和JDK有所区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
* HelloWorld.java
*/
public interface HelloWorld {
public int say(String words);
}
/**
* HelloWorldImplements.java
*/
public class HelloWorldImplements implements HelloWorld {
public int say(String words) {
System.out.println("I am saying:"+words);
return 1;
}
}
/**
* HelloWorldHandler.java
*/
public class HelloWorldHandler implements InvocationHandler {
Object target;
public HelloWorldHandler(Object target) {
super();
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before");
Object result=method.invoke(target,args);
System.out.println("after");
return result;
}
}
/**
* Main.java
*/
public class Main {
public static void main(String[] args) {
HelleWorld helleWorld = new HelloWorldImplements();
HelloWorldHandler helloWorldHandler = new HelloWorldHandler(helleWorld);
//HelleWorld proxy =(HelleWorld) Proxy.newProxyInstance(HelleWorld.class.getClassLoader(), HelloWorldImplements.class.getInterfaces(), helloWorldHandler);
HelleWorld proxy = (HelleWorld) Proxy.newProxyInstance(helleWorld.getClass().getClassLoader(), new Class[]{HelleWorld.class}, helloWorldHandler);
proxy.say("fuck the world");
}
阅读全文
0 0
- java动态代理和cglib动态代理
- java动态代理和cglib动态代理
- Java动态代理和cglib动态代理
- java动态代理和cglib
- Java 动态代理和CGlib
- java 动态代理 和 cglib代理
- Java动态代理和CGLIB代理
- Java静态代理和jdk动态代理、Cglib动态代理
- Java动态代理--cglib代理
- Java动态代理(jdk代理和cglib代理)
- Java代理机制及动态代理和CGLIB代理详解
- 【Java】CGlib动态代理
- Java-CGLib动态代理
- CGLib动态代理 java
- Java JDK动态代理和cglib动态代理
- 细说java动态代理和cglib的动态代理
- java动态代理和cglib动态代理的整合工具
- JAVA JDK动态代理和CGLIB动态代理
- 17.8.15B组总结
- 数据中设计中的范式与反范式
- LightOJ
- C++之string类学习笔记
- HihoCoder 1078(线段树,区间覆盖 询问区间和)
- Java动态代理和CGLIB代理
- 算法1.4背包(algs4)
- linux下如何使用c导入txt文件进行mysql数据库操作
- 微信支付回调效验签名
- 快速排序
- 关于ANT指定系统工程编译JDK的设置
- 微信小程序中调用page中自定义的函数
- Vim配置
- 【笔记+模板】图论 持续更新中