JAVA动态代理(proxy)

动态代理(基于接口的动态代理)
动态代理(基于接口的动态代理)
动态代理(基于接口的动态代理)
动态代理(基于子类的动态代)
动态代理(基于子类的动态代

demo

service

public interface StudentService {
	void saveStudent(int id);
	void deleteStudentById(int id);
}

serviceImpl

public class StudentServiceImpl implements StudentService{

	@Override
	public void saveStudent(int id) {
		System.out.println("存储了一个ID为:"+id+"的学生信息");
		//int a=1/0;
		
	}

	@Override
	public void deleteStudentById(int id) {
		System.out.println("删除一个ID为:"+id+"的学生信息");
		
	}

Test

public class TestSpring {

	public static void main(String[] args) {
		
		// 动态代理(基于接口的动态代理)
		StudentServiceImpl stdImpl = new StudentServiceImpl();
		StudentService serviceproxy = (StudentService) Proxy.newProxyInstance(stdImpl.getClass().getClassLoader(),
				stdImpl.getClass().getInterfaces(), new InvocationHandler() {

					@Override
					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
						Object rtvalue = null;
						int id=(int)args[0];
						if ("saveStudent".equals(method.getName())) {
							if(id>0) {
								
								rtvalue=method.invoke(stdImpl, id);
							}
						}
						if ("deleteStudentById".equals(method.getName())) {
							if (id>0) {
								rtvalue=method.invoke(stdImpl, id);
							}
						}
						return rtvalue;
					}
				});
		serviceproxy.saveStudent(10);
		serviceproxy.deleteStudentById(10);
		
		
		//基于子类动态代理(需要导包:cglib、,asm)
		StudentServiceImpl cglibStudent=(StudentServiceImpl) Enhancer.create(stdImpl.getClass(), new MethodInterceptor() {
			
			@Override
			public Object intercept(Object proxy, Method method, Object[] arg, MethodProxy methodProxy) throws Throwable {
				Object rtvalue = null;
				int id=(int)arg[0];
				if ("saveStudent".equals(method.getName())) {
					if(id>0) {
						
						rtvalue=method.invoke(stdImpl, id);
					}
				}
				if ("deleteStudentById".equals(method.getName())) {
					if (id>0) {
						rtvalue=method.invoke(stdImpl, id);
					}
				}
				return rtvalue;
			}
			
		});
		cglibStudent.saveStudent(10);
		cglibStudent.deleteStudentById(10);

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值