代理设计模式

1、概念

在这里插入图片描述

2、静态代理设计模式

在这里插入图片描述
在这里插入图片描述

3、动态代理设计模式

在这里插入图片描述

4、动态代理示例

1.FangDongService

public interface FangDongService {
    public void zufang();
}

2.FangDongServiceImpl

// 原始业务类
public class FangDongServiceImpl implements FangDongService{
    @Override
    public void zufang() {
        // 核心功能
        System.out.println("签合同");
        System.out.println("收房租");
    }
}

3.测试类

public class DynamicProxyTest {

    @Test
    public void testJDK(){

        // 目标
        FangDongService fangDongService=new FangDongServiceImpl();

        // 额外功能
        InvocationHandler ih=new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //辅助功能,非核心功能
                System.out.println("发布租房信息!");
                System.out.println("带租客看房!!");

                //核心
                fangDongService.zufang();
                return null;
            }
        };

        // 动态生成 代理类
        //参数:(当前类加载器,  接口数组(代理和目标有相同的接口实现) ,额外功能(非核心代理执行功能))
        FangDongService proxy=(FangDongService) Proxy.newProxyInstance(DynamicProxyTest.class.getClassLoader(),
                fangDongService.getClass().getInterfaces(),
                ih);

        //执行
        proxy.zufang();
    }

    @Test
    public void testCGLIB(){
        // 目标
       FangDongService fangDongService=new FangDongServiceImpl();

        //CGLIB核心对象
       Enhancer enhancer=new Enhancer();
        //将目标类做为其父类(保证接口一致)
       enhancer.setSuperclass(FangDongService.class);

       //额外功能
        enhancer.setCallback(new org.springframework.cglib.proxy.InvocationHandler() {
            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                //辅助功能
                System.out.println("发布租房信息2!");
                System.out.println("带租客看房2!");

                //核心功能
                fangDongService.zufang();
                return null;
            }
        });

        // 动态生成代理类
       FangDongService proxy=(FangDongService)enhancer.create();
       proxy.zufang();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值