使用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");
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章