java动态代理详解编程语言

 
在目前的Java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。

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

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

业务接口

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

业务接口实现

package com.blog.ytso.com.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.blog.ytso.com.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.blog.ytso.com.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); 
	} 
 
} 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/14357.html

(0)
上一篇 2021年7月19日 16:46
下一篇 2021年7月19日 16:46

相关推荐

发表回复

登录后才能评论