Java 动态代理2
代理模式是什么 代理模式是一种设计模式,简单说即是在 不改变源码 的情况下,实现对 目标对象 的 功能扩展 。 比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing()。 1 public class Singer{ 2 public void sing(){ 3 System.out.println("唱一首歌"); 4 } 5 } 假如你希望,通过你的某种方式生产出来的歌手对象,在唱歌前后还要想观众问好和答谢,也即对 目标对象 Singer的sing方法进行 功能扩展。 1 public void sing(){ 2 System.out.println("向观众问好"); 3 System.out.println("唱一首歌"); 4 System.out.println("谢谢大家"); 5 } 但是往往你又 不能直接对源代码进行修改 ,可能是你希望原来的对象还保持原来的样子,又或许你提供的只是一个可插拔的插件,甚至你有可能都不知道你要对哪个目标对象进行扩展。这时就需要用到java的代理模式了。网上好多用生活中的经理人的例子来解释“代理”,看似通俗易懂,但我觉得不适合程序员去理解。程序员应该从代码的本质入手。 Java的三种代理模式 想要实现以上的需求有三种方式,这一部分我们只看三种模式的代码怎么写,先不涉及实现原理的部分。 1.静态代理 1 public