IT虾米网

java动态代理详解

lxf 2021年06月03日 编程语言 253 0
  在目前的Java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。

其实现主要通过是java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。

Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现

业务接口

package com.itmyhome.manager; 
 
public interface UserManager { 
	public void addUser();   //增加用户 
	public boolean delUser(int id); //删除用户 
} 


业务接口实现

package com.itmyhome.manager; 
 
//UserManager接口的实现类 
public class UserManagerImpl implements UserManager { 
 
	@Override 
	public void addUser() { 
		// TODO Auto-generated method stub 
		System.out.println("--addUser()--"); 
	} 
 
	@Override 
	public boolean delUser(int id) { 
		// TODO Auto-generated method stub 
		System.out.println("--delUser()--"); 
		return true; 
	} 
 
} 


InvocationHandler实现 测试在调用接口方法前输出一行代码

package com.itmyhome.manager; 
 
import java.lang.reflect.InvocationHandler; 
import java.lang.reflect.Method; 
import java.lang.reflect.Proxy; 
 
public class ProxyHandler implements InvocationHandler { 
	private Object obj;   //要代理的对象 
	public Object createProxy(Object obj){   //创建代理  
		this.obj = obj; 
		return Proxy.newProxyInstance(obj.getClass().getClassLoader(), 
				               obj.getClass().getInterfaces(), 
				               this); 
	} 
	@Override 
	public Object invoke(Object proxy, Method method, Object[] args) 
			throws Throwable {   //具体的处理策略 根据方法名判断 
		// TODO Auto-generated method stub 
		check(); 
		Object temp = method.invoke(this.obj, args); 
		return temp; 
	} 
	public void check(){ 
		System.out.println("---check()---"); 
	} 
 
} 


测试代码

package com.itmyhome.manager; 
 
public class Client { 
 
	/** 
	 * @param args 
	 */ 
	public static void main(String[] args) { 
		// TODO Auto-generated method stub 
		ProxyHandler handler = new ProxyHandler(); 
		UserManager userManager = (UserManager)handler.createProxy(new UserManagerImpl()); 
		userManager.addUser(); 
		userManager.delUser(1); 
	} 
 
} 


 

 

 

 

 

 

 


发布评论
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

java学习笔记11--Annotation详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。