`
izuoyan
  • 浏览: 8966860 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jdk动态代理(aop原理)

阅读更多
  1. --------------------------------------------申明一个接口 这个是非常重要的---------------------------------------
  1. publicinterfaceIUser{
  2. publicvoidaddUser(UserBeanuser);
  3. publicStringfindUserById(intstuId);
  4. }

-


------------------------------------------写个类实现这个接口-----------------------------------------------------------

  1. publicclassUserImplimplementsIUser{
  2. publicvoidaddUser(UserBeanuser){
  3. System.out.println("-----------addUser------------");
  4. }
  5. publicStringfindUserById(intstuId){
  6. System.out.println("-----------findUser------------");
  7. return"Jeson";
  8. }
  9. }

---------------------------------------------------------------------------------------------------------------------------------------

下面我要在增和查的方法执行前做权限验证(securityCheck)

但是传统的写法是在调用的方法前写上这个方法 但是每个方法都写 不管是在开发期间还是维护期间都很麻烦

那我们完全可以写个动态代理 为我们的方法实现类创建动态代理 这样无需我们关注一些公共的代码 比如 权限验证啊 日志写入之类的 我们只要关注我们自己的逻辑代码就行了

具体实现如下

------------------------------------------------------创建动态代理----------------------------------------------------------

  1. publicclassSecurityHandlerimplementsInvocationHandler{
  2. /*
  3. InvocationHandler是代理实例的调用处理程序实现的接口。
  4. 每个代码实例都具有一个关联的调用处理程序。对代理实例调用方法时,将对方法调用进行编码并将其指派到它的调用处理程序的invoke方法。*/
  5. privateObjectobjectTarget;
  6. publicObjectgetNewObjectProxy(ObjectobjectTarget)//取得代理类
  7. {
  8. this.objectTarget=objectTarget;
  9. returnProxy.newProxyInstance(objectTarget.getClass().getClassLoader(),objectTarget.getClass().getInterfaces(),this);
  10. /*
  11. Proxy
  12. 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
  13. newProxyInstance(ClassLoaderloader,Class<?>[]interfaces,InvocationHandlerh)
  14. 返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。
  15. */
  16. }
  17. publicObjectinvoke(Objectobject,Methodmethod,Object[]objs)throwsThrowable{
  18. checkSecurity();
  19. Objectret=null;//方法调用后的返回值接受变量
  20. try
  21. {
  22. ret=method.invoke(objectTarget,objs);
  23. }catch(Exceptione)
  24. {
  25. e.printStackTrace();
  26. }
  27. returnret;
  28. }
  29. publicvoidcheckSecurity()
  30. {
  31. System.out.println("----------securitychecking---------------");
  32. }
  33. }
  • -------------------------------------------------------测试----------------------------------------------------------

    1. publicclassDynamicProxy{
    2. /**
    3. *@paramargs
    4. */
    5. publicstaticvoidmain(String[]args){
    6. UserBeanub=newUserBean();
    7. SecurityHandlerhandler=newSecurityHandler();
    8. IUseruser=(IUser)handler.getNewObjectProxy(newUserImpl());
    9. user.findUserById(11);
    10. }
    11. }


    -----------------------------------------------------------输出-------------------------------------------------

    ----------security checking---------------
    -----------find User------------

    分享到:
    评论

    相关推荐

      JDK动态代理 spring aop 的原理

      Jdk动态代理,基于接口的代理示例 InovactionHandler Proxy

      JDK动态代理(AOP)使用及原理分析视频教程课件

      动态代理是使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。jdk动态代理,必须有接口,目标类必须...

      Spring Aop的底层实现技术 --- Jdk动态代理原理

      Spring Aop的底层实现技术 --- Jdk动态代理原理 很不错的一篇文章

      反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

      AOP的意思就是面向切面编程。本文主要是通过梳理JDK中自带的反射机制,实现 AOP动态代理模式,这也是Spring AOP 的实现原理

      两万字吐血总结,代理模式及手写实现动态代理(aop原理,基于jdk动态代理)

      代理模式及手实现动态代理(aop原理)一、代理模式1. 定义2. 示例(1)静态代理(2)动态代理3. 通用类图4. 代理模式的优点二、jdk动态代理实现原理1. jdk动态代理源码分析(通过该示例学会阅读源码的方法)2.jdk动态...

      使用动态代理演示Spring的AOP编程原理

      为了说明Spring的AOP原理,本人使用代理模式中的动态代理完成演示AOP编程的原理的演示。相信,如果你耐心看完整个程序(几乎一行注释一行代码),那么你对Spring这个东西就不是觉得有什么神秘了! 阅读对象:凡是喜爱...

      代理机制及AOP原理实现

      spring中动态代理机制的实现原理及AOP实现原理,JDK的反射,cglib类。

      SpringAOP的实现机制(底层原理)、应用场景等详解,模拟过程的实例

      JDK动态代理: 我们将详细介绍JDK动态代理的概念和工作原理。您将了解如何使用Java的反射机制来创建代理对象,以及如何将横切逻辑注入到目标方法中。我们还提供了实际示例,演示如何在Spring AOP中使用JDK动态代理。...

      spring动态代理原理

      通过代码了解springaop原理,代码采用jdk的动态代理相关类Proxy、InvocationHandler解释动态代理模式

      Spring AOP代理详细介绍

      如果一个类实现了一个或多个接口,那么Spring就会使用默认的JDK动态代理,如果没有实现任何接口,就会使用cglib来代理。当然我们也可以手动改变这些设置。这也是比较容易掉坑的部分,如果设置错了代理方式,那么在...

      动态代理.xmind

      该思维导图主要讲解了代理模式的具体实现,包括...其中jdk代理主要讲解了其具体的实现方式、原理、缺点、缓存机制等。Cglib代理主要讲解了其原理、与JDK代理的对比、Enhancer源码解析、methodProxy和Fastclass源码等。

      Java 动态代理.md

      动态代理在 Java 中有着广泛的应用,比如 AOP 的实现原理、RPC远程调用、Java 注解对象获取、日志框架、全局性异常处理、事务处理等。 在了解动态代理前,我们需要先了解一下什么是代理模式。 代理模式 代理模式...

      spring第三天.pdf

      6. 搞清楚cglib和jdk动态代理的区别 7. 掌握cglib和jdk产生代理对象的方式 8. 掌握cglib和jdk产生代理对象的底层原理 9. 掌握cglib和jdk如何动态添加代理对象的增强功能。 课程目标 1. 可以自主完成阅读Spring框架中...

      Spring框架+Spring工作原理+AOP面向切面编程+JDK代理+Cglib代理

      Spring框架是一个开放源代码的J2EE应用程序框架,是对bean的生命周期进行管理的轻量...Spring框架主要由七部分组成,分别是Spring Core,Spring AOP,Spring ORM,Spring DAO,Spring Context,Spring Web和Spring Web MVC。

      AOP面向切面编程.docx

      1.jdk动态代理:使用jdk中的Proxy,Method,InvocaitonHanderl创建代理对象,jdk动态代理要求目标类必须实现接口 2.cglib动态代理:第三方的工具库,创建代理对象,原理是继承。 通过继承目标类,创建子类,子类就是...

      spring第四天.pdf

      7. 重点掌握aop底层的原理之动态代理机制的概述及差别 8. 重点掌握JDK代理技术之产生代理对象和代理对象执行逻辑分析 9. 重点掌握Cglib代理技术之产生代理对象和代理对象执行逻辑分析 10. 认识Spring AOP中底层常用...

      cglib.jar下载

      它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择。 二、CGLIB原理 CGLIB原理:动态...

      spring5系列 任小龙大神班

      该课程是最新的Spring5版本包含:STS工具、IoC、DI思想、Spring测试框架、bean的实例化、作用域、初始化、生命周期、静态代理、字节码加载原理、JDK动态代理和原理、CGLIB动态代理和原理、拦截器思想、AOP思想和开发...

      2020年春招最新阿里Java面试题集锦

      jdk和cglib实现的AOP实际上会在内存生成动态代理对象,还有什么其他办法实现AOP?经提示答出AspectJ以及实现原理 Spring中的对象的作用域 Singleton对象引用Prototype会发生什么 项目中怎样使用微服务? 两个服务...

      高级开发spring面试题和答案.pdf

      为什么jdk动态代理是必须是接口 两种动态代理的区别 AOP实现方式:aop注解或者xml配置;后来工具jar包aspects; aop的属性 事务 事务编码方式: 事务注意事项; 为什么同一个类A调用b方法事务,A方法一定要有事务...

    Global site tag (gtag.js) - Google Analytics