使用JDK动态代理实现切面编程

package com.huxin.dynamic_proxy;

public interface UserService {
   public void add(String userId,String name);
   public void modify(String userId,String name);
   public String findById(String userId);
}

package com.huxin.dynamic_proxy;

public class UserServiceImpl implements UserService {
	public void add(String userId, String name) {
	   System.out.println("add()");

	}
	public void modify(String userId, String name) {
	   System.out.println("modify()");

	}
	public String findById(String userId) {
		  System.out.println("findById()");
		  return "王八";
	}
}

package com.huxin.dynamic_proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.omg.CORBA.SystemException;
import org.omg.CORBA.portable.InputStream;
import org.omg.CORBA.portable.InvokeHandler;
import org.omg.CORBA.portable.OutputStream;
import org.omg.CORBA.portable.ResponseHandler;

public class LogHandler implements InvocationHandler {
	private static LogHandler instance = new LogHandler();
    private Object targetObject; 
    private LogHandler(){}
    public static LogHandler getInstance(){
		return instance;
	}
    //生成一个动态代理的对象
    public Object newDynamicproxy(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 {
		Object object = null;
		System.out.println(method.getName()+"方法开始之前被调用"+"参数为:"+ args[0]+args[1]);
		//这句话才是真正调用它的方法
		object = method.invoke(this.targetObject, args);
		System.out.println(method.getName()+"方法开始之后被调用");
		return object;
	}
}

package com.huxin.dynamic_proxy;

public class Client {
	public static void main(String[] args) {
		UserService userService = (UserService)LogHandler.getInstance().newDynamicproxy(new UserServiceImpl());
        userService.add("1", "hu_xinxin");
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值