文档章节

java --动态代理之AOP

求是科技
 求是科技
发布于 2016/10/06 10:08
字数 377
阅读 12
收藏 0

#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);
	}
}

© 著作权归作者所有

共有 人打赏支持
求是科技
粉丝 89
博文 453
码字总数 228281
作品 0
成都
后端工程师
Spring的事务管理难点剖析(6):特殊方法成漏网之鱼

由于Spring事务管理是基于接口代理或动态字节码技术,通过AOP实施事务增强的。虽然Spring还支持AspectJ LTW在类加载期实施增强,但这种方法很少使用,所以我们不予关注。 对于基于接口动态代...

icheer
2012/07/17
0
0
3.2 Spring AOP的设计与实现

JVM的动态代理特性 在Spring AOP实现中,使用的核心技术是动态代理,这实际上是JDK的一个特性(JDK1.3以上的版本有这个特性)。通过JDK的动态代理特性,可以为任意Java对象创建代理对象,对于...

edwardGe
05/30
0
0
Spring AOP 实现原理与 CGLIB 应用

AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP 实现的关键就在于 AOP 框架...

只想一个人静一静
2014/02/27
0
0
cglib代理和java自带代理的区别

一 动态代理主要有java自带的代理和cglib方式实现的代理 首先讲下java自带的代理 ------------------然后是cglib自带的代理------------------------- 测试类: java动态代理是利用反射机制生...

sen_ye
07/15
0
0
Spring AOP 实现原理与 CGLIB 应用

AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP 实现的关键就在于 AOP 框架...

ihaolin
2014/03/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

异步化,高并发大杀器

今天来聊聊如何让项目异步化的一些事。 在进入正文之前,顺便给大家推荐一个Java架构方面的交流学习群:698581634,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分...

Java大蜗牛
5分钟前
0
0
织梦dedecms安全设置

网站本身做好防范: 1、修改默认后台名。 打开网站根目录,找到[dede],这个文件夹就是后台的路径,可以随意修改,比如修改为[adminbuy],此时后台登陆的路径为:http://www.*****.com/admi...

雨季2014
6分钟前
0
0
完美Python入门基础知识点总结,看完你的Python就完全入门了!

Python标识符 在 Python 里,标识符有字母、数字、下划线组成。 在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。 Python 中的标识符是区分大小写的。 以下划线...

糖宝lsh
12分钟前
0
0
Java关于前后台传输中文乱码以及Excel下载乱码解决

针对乱码,一般情况是前后台以及中间件编码格式不同导致.故需要保证编码格式相同即可. 1.前台页面格式指定,这里用的是jsp,故需要将pageEncoding指定为"UTF-8" 2.指定服务器编码格式,比如用的t...

勤奋的蚂蚁
14分钟前
0
0
Flutter组件 - Flexible

Flexible是一个控制Row、Column、Flex等子组件如何布局的组件。 Flexible组件可以使Row、Column、Flex等子组件在主轴方向有填充可用空间的能力(例如,Row在水平方向,Column在垂直方向),但是...

一箭落旄头
17分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部