常规的代理模式大家都比较熟悉再次补多少,我们说一下动态代理。说起动态代理就必须做两件事情:
1 必须实现implements InvocationHandler
2 必须使用Proxy来进行中转,也就是使用这个
Class<?>[] interfaces,
InvocationHandler h)```
我们简单举个例子来实现动态代理以及进行执行过程的***拦截过滤***
我们来用一个明星来举例:明星上台时候受伤了只能唱歌,不能跳舞
# 1 声明interface代表通用的会唱歌会跳舞的明星
public interface IStars {
void sing();
void dance();
}
# 2 来个明星
public class Stars implements IStars {
@Override
public void sing() {
System.out.println(this.getClass().getName() + ":sing");
}
@Override
public void dance() {
System.out.println(this.getClass().getName() + ":dance");
}
}
# 3 来一个泛型的处理明星的中间代理
public class Stars implements IStars {
@Override
public void sing() {
System.out.println(this.getClass().getName() + ":sing");
}
@Override
public void dance() {
System.out.println(this.getClass().getName() + ":dance");
}
}
# 我们进行一下单元测试
import org.junit.jupiter.api.Test;
public class TestProxy {
@Test
public void test() {
Stars stars = new Stars();
StarsProxy starsProxy = new StarsProxy();
IStars iStars = starsProxy.bind(stars);
iStars.dance();
iStars.sing();
}
}
![image.png](https://img.haomeiwen.com/i1635153/44fbbac5e06581f8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
## 通过例子我看到可以动态的对实现类进行拦截,比如***拦截器 过滤器***
网友评论