JAVA动态代理

实际上就是在内存中生产一个对象,该对象实现了指定的目标对象的所有接口,代理对象和目标对象是兄弟关系。
jdk自带动态代理技术,需要使用一个静态方法来创建代理对象,它需要目标对象必须实现接口,生产的代理对象和原对象都实现相同的接口。

1.创建接口

public interface star{
    String sing(string name);
    void dance();
}

2.实现Star接口

public class Bigstar implemnts Star{
    private string name;

    public Bigstar(string name){
    this.name = name;
    }

    public string sing(string name){
        System.out.println(this.name +"正在唱:"+ name);
        return"谢谢!谢谢!";
    }

    public void dance(){
        System.out.println(this.name+ "正在优关的跳舞~-");
    }
}

3.创建代理方法工具类

public class Proxyutil {
    public static Star createProxy(BigStar bigStar){
        //newProxyInstance(ClassLoader loader.
        //Class<?>[]interfaces,InvocationHandler h)
        //参数1:用于指定一个类加载器
        //参数2:指定生成的代理长什么样子,也就是有哪些方法
        //参数3:用来指定生成的代理对象要干什么事情

    Star starProxy =(Star)Proxy.newProxyInstance(ProxyUtil.class.getclassLoader(),
        new Class[]{Star.class},new InvocationHandler(){
            @Override // 回调方法
            public Object invoke(object proxy, Method method, object[] args) throws  Throwable {
                //代理对象要做的事情,会在这里写代码
                if(method.getName().eguals("sing")){
                    System.out.println("准备话筒,收钱20万");
                    
                }else if(method.getName().equals("dance")){
                    System.out.println("准备场地,收钱1000万");
                    
                }
                return method.invoke(bigstar,args);
          });
        return starProxy;
      }
}

4.测试类

public class Test {
    public static void main(string[]args){
        BigStar s=new BigStar( name:"杨超越");
        Star starProxy = ProxyUtil.createProxy(s);

        String rs =starProxy.sing( name:"好日子");
        System.out.println(rs);

        starProxy.dance();
    }
}

 输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值