Spring学习笔记(13)----动态代理模式分析演示

上一节演示的是静态代理模式,本节演示的是静态代理模式,既然是动态,那么就不存在UserManagerImplProxy类。

使用动态代理我们需要声明一个类SecurityHandler,这个类要实现InvocationHandler接口。

在类中定义一个产生动态代理的方法newProxy();同时把我们验证的代码放到这个类中。通过SecurityHandler,当我们调用方法时默认会调用SecurityHandler类invoke方法,我们在这个方法中进行安全性检查,检查通过后在调用真实的方法。需要注意的是目标对象接口中的部分方法是存在返回值的。

package com.szy.spring;

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

public class SecurityHandler implements InvocationHandler
{
	private Object targetObject;
	
	public Object newProxy(Object targetObject)
	{
		this.targetObject=targetObject;
		//返回动态代理
		return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
									  targetObject.getClass().getInterfaces(),
									  this);
	}
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable
	{
		checkSecurity();
		Object ret=null;
		try
		{
			//调用目标对象的真实方法
			ret=method.invoke(this.targetObject, args);
			//ret接受存在的返回值,不存在返回值则为Null
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		return null;
	}
	public void checkSecurity()
	{
		System.out.println("--------UserManagerImpl.checkSecurity()----------");
	}
}

 

使用这种方式维护起来相对比较好,我想进行安全性检查就进行,不想就不进行,很方便。

下面进行客户端调用

package com.szy.spring;

public class Client
{
	public static void main(String[] args)
	{
		SecurityHandler handler=new SecurityHandler();
		//创建代理对象
		UserManager userManager=(UserManager)handler.newProxy(new UserManagerImpl());
		userManager.addUser("coolszy", "kuka");
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值