首页 > 其他分享 >aop的几种动态代理以及简单案例(1)

aop的几种动态代理以及简单案例(1)

时间:2024-07-10 10:56:11浏览次数:14  
标签:method1 System 几种 案例 aop println 代理 public out

Sping AOP是通过动态代理模式实现的,具体有两种实现方式,一种是基于Java原生的动态代理,一种是基于cglib的动态代理。

1.jdk动态代理

1.1创建需要被代理的方法接口

public interface TargetInteface {
    void method1();
    void method2();
    int method3(Integer i);
}

1.2实现编写方法逻辑

public class Target implements TargetInteface {
    @Override
    public void method1() {
        System.out.println("method1 running ...");
    }

    @Override
    public void method2() {
        System.out.println("method2 running ...");
    }

    @Override
    public int method3(Integer i) {
        System.out.println("method3 running ...");
        return i;
    }
}

1.3使用springProxy创建代理对象代理该类,在每次调用方法前后写入要进行的逻辑

public class TargetProxy {
    public static  <T> Object getTarget(T t) {
        //新构建了一个 新的 代理类的对象
        return Proxy.newProxyInstance(t.getClass().getClassLoader(), t.getClass().getInterfaces(), (proxy, method, args) -> {
            // proxy就是目标对象t,method就是调用目标对象中方法,args就是调用目标对象中方法的参数。
            //比如说:代理对象.method1(),这时proxy就是目标类,method1就是method,args就是method1方法参数。
            System.out.println("执行方法前...");
            Object invoke = method.invoke(t, args);
            System.out.println("执行方法后...");
            return invoke;
});
    }
}

1.4 使用该代理方法代理实现类

    public static void main(String[] args) {
        TargetInteface target = (TargetInteface) TargetProxy.getTarget(new Target());
        target.method1();
        System.out.println("-----------------------------");
        target.method2();
        System.out.println("-----------------------------");
        System.out.println(target.method3(3));
    



    }

2.cglib动态代理

2.1创建需要被代理的对象

public class Target {
    public void method1() {
        System.out.println("method1 running ...");
}

    public void method2() {
        System.out.println("method2 running ...");
    }

    public int method3(Integer i) {
        System.out.println("method3 running ...");
        return i;
    }
} 

2.2创建代理方enhancer代理该类

public class TargetProxy {

    public static <T> Object getProxy(T t) {
        Enhancer en = new Enhancer(); //帮我们生成代理对象
        en.setSuperclass(t.getClass());//设置要代理的目标类
        en.setCallback(new MethodInterceptor() {//代理要做什么
            @Override
            public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
                System.out.println("执行方法前。。。");
                //调用原有方法  
                Object invoke = methodProxy.invokeSuper(object, args);
                // Object invoke = method.invoke(t, args);// 作用等同与上面。
                System.out.println("执行方法后。。。");
                return invoke;
            }
        });
        return en.create();
    }
}

2.3生成代理对象使用方法

   public static void main(String[] args) {
        Target target = (Target) TargetProxy.getProxy(new Target());
        System.out.println(target.getClass().getName());
        target.method1();
        print(target);
    }

标签:method1,System,几种,案例,aop,println,代理,public,out
From: https://blog.csdn.net/weixin_69039908/article/details/140316204

相关文章

  • Spring AOP的几种实现方式
    1.通过注解实现1.1导入依赖<dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.1.6.RELEASE</version></dependency>1.2定义注解imp......
  • 多条宽带负载均衡是一种常见的网络优化技术,通常用于增加网络带宽、提高网络性能和可靠
    多条宽带负载均衡是一种常见的网络优化技术,通常用于增加网络带宽、提高网络性能和可靠性。在实现多条宽带负载均衡时,可以考虑以下几种方法:路由器级别的负载均衡:智能路由器:某些商业路由器支持多个WAN口,并能够智能地根据网络流量来分配数据到不同的宽带线路上,实现负载均衡。......
  • C#字符串操作:判断一个字符串是否存在于另一个字符串按特定字符分割后的子字符串中的几
    要判断一个字符串是否存在于另一个字符串按特定字符分割后的子字符串中,可以使用以下几种方法:方法一:使用Split和Array.Exists你可以使用Split方法将字符串分割成子字符串数组,然后使用Exists方法检查目标字符串是否在数组中:usingSystem;classProgram{staticvoid......
  • 第九期案例研讨班-第8-9组教学案例设计草稿
    基于旅游分析理论分析天津城市可持续发展策略教学目标知识目标:了解旅游分析理论及其在城市可持续发展中的应用。技能目标:掌握数据分析工具,学会运用旅游分析理论分析天津城市的可持续发展策略。态度目标:培养学生的团队合作精神和创新思维能力。教学对象本教学案例适用于本......
  • Spring Boot 微服务故障排除 – 真实案例研究
    之前碰到的一个真实案例,记录一下先来看看左移监控:优化云应用程序的途径,以及如何使用可观察性工具对SpringBoot代码问题进行左移故障排除,从而避免生产问题、不必要的成本并提高产品质量。通俗解释传统方法vs左移监控:传统方法:通常在开发接近尾声时,才开始进行严格的测......
  • Holder模式(Holder Pattern):公司员工权限管理系统实战案例分析
    肖哥弹架构跟大家“弹弹”业务中设计模式的使用,需要代码关注欢迎点赞,点赞,点赞。关注公号Solomon肖哥弹架构获取更多精彩内容在一个大型公司中,员工根据其职位和部门被赋予不同的权限。这些权限可能包括访问敏感数据、审批财务报告、提交报销等。随着公司规模的增长......
  • 2024.07.09【读书笔记】|医疗科技创新流程(第二章 创新创造 概念探索与测试案例分析1)
    案例一:Oculeve-神经刺激治疗干眼症背景与挑战干眼症(DryEyeDisease,DED)是一种常见的眼部疾病,影响着数百万美国人的生活质量。该病症由泪液不足或蒸发过快引起,导致眼表炎症、疼痛、灼热感、异物感和视力受损。Oculeve团队认识到,尽管市场上有人工泪液等治疗方法,但这些方......
  • R语言实现 Copula 算法建模相依性案例分析报告
    原文链接:http://tecdat.cn/?p=6193原文出处:拓端数据部落公众号 copula是将多变量分布函数与其边缘分布函数耦合的函数,通常称为边缘。Copula是建模和模拟相关随机变量的绝佳工具。Copula的主要吸引力在于,通过使用它们,你可以分别对相关结构和边缘(即每个随机变量的分布)进行建模。......
  • rfs (PID:146054): Database mount ID mismatch案例
    测试环境中,新搭建的Oracle19cDG,在主备切换后,新的主库的告警日志中一直出现类似下面这样的错误:.........................................2024-07-08T13:40:55.384302+08:00 rfs (PID:146054): Database mount ID mismatch [0x358d50ef:0x358e23cd] (898453743:8985077......
  • 2024年7个最佳WooCommerce商城案例
    WooCommerce毫无疑问是最受欢迎的电子商务平台。截至2021年,它的下载量已超过8230万次,运行的网站超过380万个。 就市场份额而言,WooCommerce高达40.9%—比紧随其后的竞争对手Shopify高出近15%。 这些数字说明了WooCommerce的规模有多大,以及无数电子商务品......