静态代理的实例和动态代理的实例

静态代理:

package proxy.statics;

   interface UserService{
	public void saveUser();
}

 class UserServiceImpl implements UserService{
	@Override
	public void saveUser() {
		System.out.println("2.保存用户信息");
	}
 }
 
 class StaticProxy implements UserService{
    private UserService userService;
    private void open(){
    	System.out.println("1.打开数据库连接");
    }
	@Override
	public void saveUser() {
        this.open();
        userService.saveUser();
	}
	
	public StaticProxy(UserService userService) {
		this.userService=userService;
	}
 }
 
public class TestStaticProxy {
   public static void main(String[] args) {
	  UserService userService=new StaticProxy(new UserServiceImpl());
	  userService.saveUser();
}
}

运行结果:

                 1.打开数据库连接
                 2.保存用户信息

动态代理:

package proxy.dynamic;

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

interface UserService{
	public void saveUser();
}

 class UserServiceImpl implements UserService{

	@Override
	public void saveUser() {
		System.out.println("2.保存用户信息");
	}
 }

class DynamicProxy implements InvocationHandler{
    private Object target=null; 
    
    private void open(){
    	System.out.println("1.打开数据库连接");
    }
    
    /**
     * 
		      loader - 定义代理类的类加载器
		      interfaces - 代理类要实现的接口列表
		       h - 指派方法调用的调用处理程序
     */
    public Object getProxy(Object object) {
		 this.target=object;
		  //可以这样写
		 /*Interface proxy=(interface)Proxy.newProxyInstance(object.getClass().getClassLoader(),
					object.getClass().getInterfaces(), this);*/
		return Proxy.newProxyInstance(object.getClass().getClassLoader(),
				object.getClass().getInterfaces(), this);
	}
	/**
	 * 		Ojbect proxy:表示需要代理的对象
  		         Method method:表示要操作的方法
             		Object[] args:method方法所需要传入的参数(可能没有为,null.也可能有多个)
	 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		open();
		Object result=method.invoke(target, args);
		return result;
	}
}
 
public class TestDynamicProxy {
   public static void main(String[] args) {
	 UserService userService=(UserService) new DynamicProxy().getProxy(new UserServiceImpl());
	 userService.saveUser();
}
}
运行结果:

                 1.打开数据库连接
                 2.保存用户信息



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值