Java的动态代理
发布日期:2021-11-04 11:54:24 浏览次数:0 分类:技术文章

目录


一、静态代码

定义一个接口如下:

public interface Flyable{    void flight();}

编写实现类如下:

public class Bird implements Flyable{    public void flight()    {        System.out.println("Brid fly in the sky!");    }}

创建实例,接口调用如下:

Flyable f = new Bird();f.flight();

 

二、动态代码

Java标准库提供了一种动态代理(Dynamic Proxy)的机制:可以在运行期动态创建某个interface的实例。

public class MainTest{    public static void main(String[] args)    {        Flyable f = (Flyable) Proxy.newProxyInstance(                Flyable.class.getClassLoader(), // 传入ClassLoader                new Class[] { Flyable.class },  // 传入要实现的接口                (proxy, method, ars) ->         // 传入处理调用方法的InvocationHandler                {                    System.out.println(method);                    if (method.getName().equals("flight"))                    {                        System.out.println("dynamic proxy, can fly too!");                    }                    return null;                });         f.flight();    }}

从上述代码中可以发现,主要是用Proxy的newProxyInstance方法对这个interface生成一个代理对象。

public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)

loader:选用的类加载器

interfaces:被代理的类所实现的接口,这个接口可以是多个。

h:绑定代理类的一个方法,public Object invoke(Object proxy, Method method, Object[] args) throws Throwable;

 

动态代理是通过Proxy创建代理对象,主要是用反射来实现实例化的,然后将接口方法“代理”给InvocationHandler完成的。

动态代理其实一般很少去手写,但是却经常使用到。在Spring项目中用的注解是动态代理最佳的落地点,例如依赖注入的@Bean、@Autowired,事务注解@Transactional等。

上一篇:Java旧版本时间、日期处理
下一篇:几种任务调度的 Java 实现方法与比较

关于作者

    白红宇是个全栈工程师,前端vue,小程序,app开发到后端框架设计,数据库设计,环境部署上线运维。

最新文章

作者:姚阳(1979-),女,广州市社会科学院经济学副研究员。 2021-06-27
作者:周晓津(1971-),男,博士,广州市社会科学院研究员。 2021-06-27
基于大数据的京沪人口流动流量、流向新变化 2021-06-27
作者:王印海(1965-),男,美国华盛顿大学(西雅图)土木和环境工程系终身教授、博士生导师。... 2021-06-27
作者:马晓磊(1985-),男,北京航空航天大学交通科学与工程学院交通运输工程系副教授、博士生导师。... 2021-06-27
作者:张国惠(1978-),男,美国新墨西哥大学土木工程系助理教授、博士生导师。... 2021-06-27
作者:陈聪(1985-),男,博士,美国新墨西哥大学土木工程系博士后研究员。... 2021-06-27
利用大数据挖掘和知识发现技术辅助智慧城市发展 2021-06-27
华岗(1977-),男,博士,宁波市智慧城市规划标准发展研究院副研究员。 2021-06-27
黄晁(1972-),男,博士,中国科学院计算技术研究所副研究员,宁波中国科学院信息技术应用研究院院长。... 2021-06-27
洪学海(1967-),男,博士,中国科学院计算技术研究所研究员。 2021-06-27
范灵俊(1983-),男,博士,中国科学院计算技术研究所工程师. 2021-06-27
政府大数据治理的挑战及对策 2021-06-27
李国杰(1943-),男,博士,中国工程院院士。 2021-06-27
洪筱楠(1996-),女,对外经济贸易大学国际经济贸易学院经济学荣誉学士实验班本科生。... 2021-06-27
范灵俊(1983-),男,博士,中国科学院计算技术研究所工程师,信息技术战略研究中心战略研究主管,美国韦恩州立大学访问学者。... 2021-06-27
洪学海(1967-),男,博士,中国科学院计算技术研究所研究员,信息技术战略研究中心常务副主任。... 2021-06-27
方丹丹(1981-),女,就职于宁波市智慧城市规划标准发展研究院。 2021-06-27
许海燕(1987-),女,宁波市智慧城市规划标准发展研究院研究人员. 2021-06-27
刘良华(1969-),男,宁波市智慧城市规划标准发展研究院研究室副主任. 2021-06-27