博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java --动态代理之AOP
阅读量:6564 次
发布时间:2019-06-24

本文共 1657 字,大约阅读时间需要 5 分钟。

hot3.png

#1测试类

/** * 动态代理之AOP */public class TestAOP {		public static void main(String[] args) {		//1.创建一个被代理类		SuperMan sm = new SuperMan();		//2.返回一个动态代理类		Object obj =MyProxy.getProxyInstance(sm);		//3.转换		Human hm = (Human) obj;		//4.调用方法		hm.info();		//换行		System.out.println("==================");		//5.调用方法		hm.fly();	}}

#2.接口

//接口interface Human{	void info();	void fly();}

#3.被代理类

//被代理类class SuperMan implements Human{	@Override	public void info() {		System.out.println("我是超人");	}	@Override	public void fly() {		System.out.println("我能飞");	}}

#4.两个固定模块

//提供两个固定方法//需求:在这两个方法之间动态的插入一个方法class HumanUtil{	public void method1(){		System.out.println("-----方法1------");	}	public void method2(){		System.out.println("-----方法2------");	}}

#5.代理类实现方法

//代理类实现方法class MyInvocation implements InvocationHandler{	//被代理对象的声明	Object obj;	/*	//方法1:给代理对象赋值,通过set方法	public void setObject(Object obj) {		this.obj = obj;	}*/	//方法2:给代理对象赋值,通过构造器	public MyInvocation(Object obj) {		this.obj = obj;	}		@Override	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {				/**		 * 需求:在如上提供的两个方法之间动态插入一个方法		 */		HumanUtil humanUtil = new HumanUtil();		//1.调用方法1		humanUtil.method1();		//2.插入动态方法		//这里实际调用的是被代理类要执行的方法(即动态的方法)		Object returnVal = method.invoke(obj, args);		//3.调用方法2		humanUtil.method2();		return returnVal;	}}

#6.动态的创建一个代理类的对象

//动态的创建一个代理类的对象class MyProxy{	public static Object getProxyInstance(Object obj){		MyInvocation handler = new MyInvocation(obj);		//handler.setObject(obj);		return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), handler);	}}

转载于:https://my.oschina.net/u/2312022/blog/754686

你可能感兴趣的文章
简明 MongoDB 入门教程
查看>>
.NET Core 3.0中的数据库驱动框架System.Data
查看>>
北大AI公开课2019 | 雷鸣:人工智能革命与机遇
查看>>
英特尔开源计算机视觉数据标签工具CVAT,加速数据注释
查看>>
consule服务注册和发现 安装 部署
查看>>
多个帐户都用root 来登录 怎么看另一个用户使用的那些命令
查看>>
Map集合案例
查看>>
《FPGA全程进阶---实战演练》第十一章 VGA五彩缤纷
查看>>
第七次课程作业
查看>>
C++ 文本查询2.0(逻辑查询)
查看>>
Objective-C学习总结-13协议1
查看>>
web学习方向
查看>>
A*算法实现
查看>>
第一周 从C走进C++ 002 命令行参数
查看>>
【java】itext pdf 分页
查看>>
看看这个电脑的配置
查看>>
[转]【NoSQL】NoSQL入门级资料整理(CAP原理、最终一致性)
查看>>
RequireJS进阶(二)
查看>>
我设计的网站的分布式架构
查看>>
linux extract rar files
查看>>