动态代理

动态代理概述

代理主要是对对象的行为额外做一些辅助操作。

 

**@**如何创建代理对象

Java中代理的代表类是:java.lang.reflect.Proxy

Proxy提供了一个静态方法,用于为对象产生一个代理对象返回。
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
51
52
53
54
55
56
57
58
59
60
61
 package com.proxy1;

public interface skill {
void jump();
void sing();
}

package com.proxy1;
public class stat implements skill{
private String name;
public stat(String name) {
this.name = name;
}
@Override
public void jump() {
System.out.println("开始跳舞");
}
@Override
public void sing() {
System.out.println("开始唱歌");
}
}



package com.proxy1;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;



public class statAgent {
public static skill getProxy(stat obj){
return (skill) Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("首付款");
Object rs = method.invoke(obj, args);
System.out.println("收尾款");
return rs;
}
});
}
}



package com.proxy1;

public class Test {
public static void main(String[] args) {
stat s = new stat("杨超越");
skill s2 = statAgent.getProxy(s);
s2.jump();
s2.sing();
}
}

Java****中如何生成代理,并指定代理干什么事

图片

总结:

**1.****代理是什么?**

一个对象,用来对被代理对象的行为额外做一些辅助工作。

**2.****在****Java****中实现动态代理的步骤是什么样的?**

1必须存在接口

2被代理对象需要实现接口

3使用Proxy类提供的方法,方法的代理对象

**3.****通过代理对象调用方法,执行流程是怎么样的?**

1先走向代理

2代理可以为方法额外做一些辅助工作

3开发真正触发对象的方法的执行

4回到代理中,由代理负责返回结果给方法的调用者

优化的关键步骤

1必须有接口,实现类要实现接口(代理通常是基于接口实现的)

2创建一个实现类的对象,该对象为业务对象,紧接着为业务对象做一个代理对象

 

动态代理的优点:

1
2
3
4
1可以在不改变方法源码的情况下,实现对方法功能的增强,提高了代码的复用。
2简化了编程工作、提高了开发效率,同时提高了软件系统的可扩展性。
3可以被代理对象的所有方法做代理。
4非常的灵活,支持任意接口类型的实现类对象做代理,也可以直接为接口本身做代理。