jdk动态代理

package com.spring.jdkTest;
//接口
public interface Iuser {

	void printOne();
	void printTwo();
	}
package com.spring.jdkTest;
//目标类
public class UserImpl implements Iuser {

	@Override
	//连接点
	public void printOne() {
	System.out.println("One");	

	}

	@Override
	//连接点
	public void printTwo() {
	System.out.println("Two");	

	}

}

//通知类
package com.spring.advice;

public class Advice {
	public void before() {
		System.out.println("前");
	}
	public void after() {
		System.out.println("后");
	}
}

package com.spring.proxy;
//代理类
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


import com.spring.advice.Advice;
import com.spring.jdkTest.Iuser;
import com.spring.jdkTest.UserImpl;

public class MyProxy {
	public static Iuser getIuser() {
		Iuser user = new UserImpl();
		Advice advice = new Advice();
		//jdk动态代理 Proxy
		//1 个参数loader类加载器
		//2个Interfaces 获得到目标类的接口 user.getClass().getInterfaces()(父亲)不能得到爷爷
		//proxy:代理的真实对象
		//method:调用某个对象真实的方法的method对象
		//agrs:代理对象方法传递的参数
		Iuser userProxy = (Iuser)Proxy.newProxyInstance(MyProxy.class.getClassLoader(),
				user.getClass().getInterfaces(), new InvocationHandler() {
					
					@Override
					public Object invoke(Object proxy, Method method, Object[] args)
							throws Throwable {
						advice.before();
						Object obj =method.invoke(user, args);//method反射,把所有方法封装成一个对象
						advice.after();
						return obj;
					}
				});
		return userProxy;
	}
}

package com.spring.jdkTest;

import org.junit.Test;

import com.spring.proxy.MyProxy;

public class SpringTest {
	@Test
public void test() {
	
//	Iuser user = new UserImpl();
//	user.printOne();
//	user.printTwo();
	Iuser user = MyProxy.getIuser();
	user.printOne();
	user.printTwo();
}
}

//结果
前
One
后
前
Two
后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值