Spring动态代理设计模式

动态代理设计模式

动态创建代理类的对象,为原始类的对象添加辅助功能。

核心业务

public interface FangDong {
    void zufang();
}
public class FangDongImpl implements FangDong {
    @Override
    public void zufang() {
        //核心功能
        System.out.println("钱合同");
        System.out.println("每月收钱");
        System.out.println("每半年加租");

    }
}

1.JDK动态代理实现(基于接口)

/**
     * @author: qiuyongqi
     * @time: 21:01 2021/5/17
     * @description: jdk动态代理
     */
    @Test
    public void t(){
        //实现动态代理
        //1 代理目标
         final FangDong fd = new FangDongImpl();
        //2 代理类 JDK动态代理
        InvocationHandler ih=new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //辅助功能
                System.out.println("发布房源");
                System.out.println("带人看房");
                System.out.println("这个房东很烦不要乱说话");
                //核心业务
                fd.zufang();
                return null;
            }
        };
        //3 执行动态代理
        FangDong o = (FangDong) Proxy.newProxyInstance(text.class.getClassLoader(), FangDongImpl.class.getInterfaces(), ih);
        //4调用代理的方法
        System.out.println(o);

    }

2. CGlib动态代理实现(基于继承)

 /**
     * @author: qiuyongqi
     * @time: 21:22 2021/5/17
     * @description: cglib
     */
    @Test
    public void t1(){
        //实现动态代理
        //1 代理目标
        final FangDong fd = new FangDongImpl();
        //2
        Enhancer en =new Enhancer();
        //设置生成出来的动态代理类的父类
        en.setSuperclass(FangDongImpl.class);
        //设置动态代理的业务
        en.setCallback(new org.springframework.cglib.proxy.InvocationHandler(){

            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                //辅助功能
                System.out.println("发布房源");
                System.out.println("带人看房");
                System.out.println("这个房东很傻去压价");
                //核心业务
                fd.zufang();
                return null;
            }
        });
        //生成对应的动态代理类
        FangDongImpl o = (FangDongImpl) en.create();
        o.zufang();

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值