JDK 기반 동적 에이전트

3220 단어 DAOjdk

참고: JDK는 인터페이스의 동적 에이전트만 지원하고 클래스의 동적 에이전트는 지원하지 않습니다.


 


먼저 Dog을 예로 들어 인터페이스를 씁니다.

package com.lbx.dao;

public interface Dog {
	public void info();
	public void run();
}

 
 

Dog 인터페이스의 실현

package com.lbx.dao.impl;

import com.lbx.dao.Dog;

public class DogImpl implements Dog {

	@Override
	public void info() {
		// TODO Auto-generated method stub
		System.out.println("     ");
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("    RUN");
	}

}

 
 

대상 프록시 대상은 방법 앞뒤에 삽입하는 방법이 필요합니다

package com.lbx.interceptor;

public class DogInterceptor {

	public void method1(){
		System.out.println("       ");
	}
	
	public void method2(){
		System.out.println("       ");
	}
	
}

 
 

키 코드(업무 처리)

package com.lbx.interceptor;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class ProxyHandler implements InvocationHandler {

	//          
	private Object targer;
	//        
	DogInterceptor di = new DogInterceptor();
	
	//          ,       
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result = null;
		if(method.getName().equals("info")){
			di.method1();
			result = method.invoke(targer, args);
			di.method2();
		}else {
			result = method.invoke(targer, args);
		}
		
		return result;
	}

	//             
	public void setTarger(Object o){
		this.targer = o;
	}
	
}

 

대상 프록시 객체의 플랜트

package com.lbx.interceptor;

import java.lang.reflect.Proxy;

import com.lbx.dao.impl.DogImpl;

public class MyProxyFactory {

	public static Object getProxy(Object object){
		
		ProxyHandler handler = new ProxyHandler();
		handler.setTarger(object);
		
		return Proxy.newProxyInstance(DogImpl.class.getClassLoader(), 
				object.getClass().getInterfaces(), handler);
		
	} 
	
}

 
 

테스트 클래스

package com.lbx.test;

import com.lbx.dao.Dog;
import com.lbx.dao.impl.DogImpl;
import com.lbx.interceptor.MyProxyFactory;

public class Test {

	public static void main(String[] args) {
		//               
		Dog targerObject = new DogImpl();
		Dog dog = null;
		
		//      
		Object proxy = MyProxyFactory.getProxy(targerObject);
		if (proxy instanceof Dog) {
			dog = (Dog)proxy;
		}
		dog.info();
		dog.run();
	}
	
}

 

좋은 웹페이지 즐겨찾기