AOP学习必备~AOP与动态代理

基于动态代理的AOP编程

直接code吧,这个看不懂的就是java动态代理还不够扎实,可以去看看先再来弄这个

  1. 首先写接口(必须的)也是代理对象,StudentDAO.java:
package DyAOP;

public interface StudentDAO {
	public void AttendClass();
}

2.实现接口和重写其方法,StudentImpl.java:

package DyAOP;

public class StudentImpl implements StudentDAO {

	@Override
	public void AttendClass() {
		// TODO Auto-generated method stub
		System.out.print("学生上课");
	}

}

3.代理类,里面有具体增强的方法,MyInvocationHander.java:

package DyAOP;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyInvocationHander implements InvocationHandler {
	
	//目标对象传进来
	Object obj;
	
	public MyInvocationHander(Object obj) {
		super();
		this.obj = obj;
	}
/*
 * 第一个指被代理的对象
 * 目标对象需要执行的方法,jdk会传过来
 * 这个方法的参数
 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("老师来了,准备上课");//前置增强
		//执行目标方法
		method.invoke(obj, args);
		return null;
	}

}

4.最好测试类,Classroom.java:

package DyAOP;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

public class Classroom {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//目标对象
		StudentDAO stu=new StudentImpl();
		
		//jdk进行动态代理,对目标方法进行加强
		/*三个参数的意思
		 * 1)类加载器
		 * 2)目标对象实现的接口
		 * 3)实现InvocationHander接口的对象
		 */
		InvocationHandler h=new MyInvocationHander(stu);
		//创建代理对象
		Object newPro= Proxy.newProxyInstance(stu.getClass().getClassLoader(),stu.getClass().getInterfaces(), h);
		//执行代理对象方法
		StudentDAO proxy=(StudentDAO)newPro;//代理对象是studentDao,就要转成这个类型
		proxy.AttendClass();
	}

}

运行如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值