海阔天空

当前时间为:
欢迎大家来到海阔天空https://www.9713job.com,广告合作以及淘宝商家推广请微信联系15357240395

2020java框架教程之spring代理模式

未分类
2020-12-24 17:00:31
1822677238@qq.com

手机扫码查看

2020java框架教程之spring代理模式

2020java框架教程之spring代理模式

概念:

将核心功能与辅助功能(事务、日志、性能监控代码)分离,达到核心业务功能更纯粹、辅助业务功能可复用。

静态代理设计模式

通过代理类的对象,为原始类的对象(目标类的对象)添加赋值功能,更容易更换代理实现类、利于维护。

例如:

1.创建房东接口(租房方法)以及接口实现类(发布租房信息、收房租业务)

2.创建代理类(FangDongProxy)实现房东接口

3.创建测试类:创建代理类,调用租房方法


动态代理设计模式

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

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

@Test
public void TestJDK(){
    //目标
    FangDongService fds=new FangDongServiceImpl();
    //额外功能
    InvocationHandler ii=new InvocationHandler() {
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            //辅助功能、额外功能
            System.out.println("发布租房信息");
            System.out.println("带租客看房");
            //核心
            fds.zufang();
            return null;
        }
    };
    //动态生成代理类
    FangDongService proxy = (FangDongService)Proxy.newProxyInstance(Tests.class.getClassLoader(),
            fds.getClass().getInterfaces(), ii);
    proxy.zufang();
}

2.CGlib代理(基于继承)

a.导入spring依赖

b.测试

@Test
public void TestCGLIB(){
    //目标
    FangDongService fds=new FangDongServiceImpl();
    //
    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(FangDongServiceImpl.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");
            //核心
            fds.zufang();
            return null;
        }
    });
    //动态生成代理类
    FangDongServiceImpl proxy = (FangDongServiceImpl) enhancer.create();
    proxy.zufang();
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注