动态代理是基于什么原理(总结杨晓峰的博客)

动态代理的原理

编程语言分为:动态类型,静态类型

动态类型和静态类型的区别?

一种比较简单的区别方法:是在编译期进行检查,还是在运行时期进行检查。

通常认为:java是一种强类型语言,但是提供类似反射的机制,也具备部分动态语言的能力。



反射机制是java语言提供的一种基础功能,赋予程序在运行时自省(introspect能力),通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性或者方法,调用方法或者构造对象,甚至可以运行时修改类定义。

动态代理是一种方便运行时动态构建代理、动态处理代理方法调用的机制。

实现动态代理的方式有很多:比如jdk自身提供的动态代理,性能更高的字节码操作机制,类似ASM、cglib(基于ASM),Javassist

jdk动态代理的实例

public class MyDynamicProxy{
    public static void main(String[] args) {
        HelloImpl hello = new HelloImpl();
        MyInvocationHandler handler = new MyInvocationHandler(hello);
        //构造代码实例
        Hello proxyHello = (Hello)Proxy.newProxyInstance(HelloImpl.class.getClassLoader(),HelloImpl.class.getInterfaces(),handler);
        //调用代理方法
        proxyHello.sayHello();
    }

    interface Hello{
        void sayHello();
    }

    class HelloImpl implements Hello{
        @Override
        public void sayHello(){
            System.out.println("Hello world");
        }
    }

    class MyInvocationHandler implements MyInvocationHandler{
        private Object target;
        public MyInvocationHandler(Object target){
            this.target = target;
        }

        @Override
        public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
            System.out.println("Invoking sayHello");
            Object result = method.invoke(target,args);
            return result;
        }
    }
}


动态代理是基于什么原理(总结杨晓峰的博客)

原文地址:https://www.cnblogs.com/zhangchiblog/p/9052153.html

时间: 2024-10-17 19:35:52

动态代理是基于什么原理(总结杨晓峰的博客)的相关文章

Java 动态代理是基于什么原理(还没整理完)

1> Java的反射机制在平时的业务开发过程中很少用到,但是在一些基础框架的搭建上应用非常广泛 2>什么是Java反射机制 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. 3>反射机制提供了哪些功能 ----在运行时判定任意一个对象所属的类 ----在运行时构造任意一个类的对象 ----在运行时判定任意一个类所具有的成员变量和方法 --

Java之美[从菜鸟到高手演练]之JDK动态代理的实现及原理

JDK动态代理的实现及原理 作者:二青 邮箱:[email protected]     微博:http://weibo.com/xtfggef 动态代理,听上去很高大上的技术,在Java里应用广泛,尤其是在Hibernate和Spring这两种框架里,在AOP,权限控制,事务管理等方面都有动态代理的实现.JDK本身有实现动态代理技术,但是略有限制,即被代理的类必须实现某个接口,否则无法使用JDK自带的动态代理,因此,如果不满足条件,就只能使用另一种更加灵活,功能更加强大的动态代理技术-- CG

4-源码方式基于LAMP架构搭建BBS论坛或者博客

目录 一.项目简介 二.环境准备 三.编译安装MySQL 四.编译安装Apache 五.编译安装PHP 六.后续配置 七.启动相关服务 八.源码编译软件经验总结 九.部署web应用 排错1: 排错2: 排错3: 大功告成! 课程目标 使用源码方式基于LAMP架构搭建BBS论坛或者博客 本文成功搭建2个网站,一个个人博客,一个是web界面管理mysql数据库的应用 请耐心阅读,细心操作,你也会成功! 思考:yum工具搭建lamp环境和源码包搭建的区别 rpm版本 安装方便,升级.卸载都很灵活,很难

基于tomcat+spring+mysql搭建的个人博客

基于tomcat和spring开发的个人博客, 服务器是基于tomcat, 用了spring框架, web.xml的配置简单明了,我们只要配置MYSQL和用户过滤器等, 服务器的jsp就是负责VIEW, 用户通过ajax请求, 与服务器进行交互, 编辑器使用了百度的UEeditor::   数据表 数据库有四个表,一切基于数据进行展开, 用户表, 博客内容表, 博客评论表以及友情链接的表: //用户表: CREATE TABLE `user` ( `username` varchar(20) N

Canvas之动态波浪效果_陈在真Sunny_chen_新浪博客

Canvas之动态波浪效果_陈在真Sunny_chen_新浪博客 Canvas之动态波浪效果 (2012-04-26 09:04:51) 转载▼

基于MEAN全栈架构的多用户博客系统(Angular2+Node+MongoDB)

基于MEAN全栈架构的多用户博客系统(Angular2+Node+MongoDB)课程学习地址:http://www.xuetuwuyou.com/course/223课程出自学途无忧网:http://www.xuetuwuyou.com 课程介绍一.课程简介MEAN是一个Javascript平台的现代Web开发框架总称,它是MongoDB + Express +AngularJS + NodeJS 四个框架的第一个字母组合.它与传统LAMP一样是一种全套开发工具的简称.本课程结合项目全面系统的

前端路由实现原理 - 王汉镇的博客

前端路由的方式有两种 history路由:history.pushState()+popState事件 hash路由:location.hash+hashchange事件 history路由 history API是HTML5新增的API,跟路由有关的两个API是 history.pushState()和history.repalceState() 这两个api都可以操作浏览器的历史记录,而且不会引起刷新.不过前者会向浏览器新增一条历史记录,而后者是直接替换当前的历史记录. 这两个api都接受三

alljoyn:基于java动态代理的RPC实现原理分析

alljoyn是由高通开源,allseen组织下,作为IOT的一个开源软件框架. 本文分析它的core部分的远程调用方法的实现过程. 以android core sdk的release版本中的simple程序为例子. (eg alljoyn-14.06.00a-android-sdk-rel\alljoyn-android\core\alljoyn-14.06.00a-rel\java\samples\simple\client) 1. 下面是一个定义为alljoyn接口,并定义了一个远程调用方

LAMP架构搭建以及基于LAMP架构的主流论坛和博客搭建过程详解

了解网站架构的朋友都知道,现在很多网站的架构都是采用LAMP(Linux+Apache+Mysql/Mariadb+Php)的,至于LAMP架构本身我们就不做过于深入的探讨了,今天我给大家分享的是关于如何搭建LAMP构架,以及如何基于lamp架构去搭建目前国内比较流行的两大开源论坛(phpwind.discuz)一大开源博客(wordpress),通过这个过程也就能让大家明白我们经常上的论坛以及博客,包括包括我们访问的各个网站到底是如何工作起来的. 注意:为了方便给大家展示实验效果,我们就直接关