天天看點

Java 動态代理實作通用代理類 AOP

//抽象主題角色
interface Subject {
	public void request();
}
//******************************************************************
//******************************************************************
//******************************************************************
//具體主題角色
public class RealSubject implements Subject {
    //實作方法
	@Override
	public void request() {
		//業務邏輯處理
		System.out.println("實作Subject request方法");
	}

}

//******************************************************************
//******************************************************************
//******************************************************************
public class SubjectHandle implements InvocationHandler {
	//被代理的對象
	private Subject subject;
	
	
	public SubjectHandle(Subject _subject) {
		subject = _subject;
	}


	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("預處理");
		Object obj = method.invoke(subject, args);
		System.out.println("後處理");
		return obj;
	}
}

//******************************************************************
//******************************************************************
//******************************************************************
public static void main(String[] args) {
		// 具體主題角色,也就是被代理類
		Subject subject = new RealSubject();
		// 代理執行個體的處理Handle
		InvocationHandler handle = new SubjectHandle(subject);
		// 目前加載器
		ClassLoader loader = subject.getClass().getClassLoader();
		// 動态代理
		Subject proxy = (Subject) Proxy.newProxyInstance(loader,  subject.getClass().getInterfaces(), handle);
		// 執行具體主題角色方法
		proxy.request();
}