Java的动态代理
发布日期:2021-11-04 11:54:24
浏览次数:19
分类:技术文章
本文共 1420 字,大约阅读时间需要 4 分钟。
目录
一、静态代码
定义一个接口如下:
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等。
转载地址:https://blog.csdn.net/WXS_0218/article/details/102716329 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月21日 12时24分53秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mysql整体会滚_滚mysql
2019-04-21
向mysql数据库中添加批量数据类型_使用JDBC在MySQL数据库中快速批量插入数据
2019-04-21
mssql连接mysql数据库文件_在本地 怎么远程连接MSSQL数据库
2019-04-21
mssql 远程无法连接mysql_解决SQLServer远程连接失败的问题
2019-04-21
linux mysql c++编程_Linux下进行MYSQL的C++编程起步手记
2019-04-21
Maria数据库怎么复制到mysql_MySQL、MariaDB数据库的AB复制配置过程
2019-04-21
mysql5.6 icp mrr bak_【mysql】关于ICP、MRR、BKA等特性
2019-04-21
mysql utf8跟utf8mb4_MySQL utf8 和 utf8mb4 的区别
2019-04-21
docker mysql开机自启动_Docker学习4-学会如何让容器开机自启服务【坑】
2019-04-21
在mysql中删除表正确的是什么_在MySQL中删除表的操作教程
2019-04-21
mysql有3个共同好友_共同好友mysql
2019-04-21
代理查询 mysql_查询数据库代理设置
2019-04-21
mysql dif_mysqldiff实现MySQL数据表比较
2019-04-21
mysql 允许其他主机访问权限_允许其他主机访问本机MySQL
2019-04-21
druid不能close mysql连接_alibaba druid mysql连接问题
2019-04-21
mysql 设置按天分表_MySQL 优化实战记录
2019-04-21
java连接mysql 不推荐_java连接mysql
2019-04-21