Struts2 차단기 기본 실현 원리

1. 우선 차단기 클래스 정의
차단기 클래스는 일반적인 클래스입니다. 두 가지 방법이 있습니다. 하나는 차단된 대상이 실행하기 전에 무엇을 하는지, 다른 하나는 차단된 대상이 실행하기 전에 무엇을 하는지 정의하는 것입니다.
/*
 *  
 */
public class Interceptor {
	public void doBefore(){
		System.out.println("do before");
	}
	public void doAfter(){
		System.out.println("do after");
	}
}
 
2. 목표 클래스 정의
대상 클래스는 차단 처리된 객체 클래스입니다.
쓰다
/**
* 대상 클래스 인터페이스 정의
* @author JyeChou
*
*/
public interface TargetInterface {
public void doSomething();
}
 
/**
* 대상 클래스
* @author JyeChou
*
*/
public class Target implements TargetInterface {
@Override
public void doSomething() {
System.out.println("Do something!");
}
}
  
 
3. 프로세서 클래스 정의
프로세서 클래스는 언제, 목표 클래스의 어떤 방법을 차단 처리할지 정의합니다.
/**
 *  
 * @author JyeChou
 *
 */
public class MyHandler implements InvocationHandler {
	
	private Object object;
	private Interceptor interceptor = new Interceptor();

	public void setObject(Object object){
		this.object = object;
	}
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result = null;
		
		interceptor.doBefore();
		
		result = method.invoke(object, args);
		
		interceptor.doAfter();
		
		return result;
	}

}
 
 
4. 프록시 클래스 정의
반사 메커니즘을 통해 목표 대상에 대해 동적 에이전트를 진행하다.
/**
 *  
 * @author JyeChou
 *
 */
public class MyProxy {
	
	// , Object
	public Object getProxy(Object object){
		
		MyHandler myHandler = new MyHandler();
		
		myHandler.setObject(object);
		
		return Proxy.newProxyInstance(Target.class.getClassLoader(), object.getClass().getInterfaces(), myHandler);
		
		
	}

}
 
 
 
5. 대리 공장류를 사용하여 대상 대리 실현
    
/**
 *  
 * @author JyeChou
 *
 */
public class Client {

	public static void main(String[] args) {
		
		// 
		TargetInterface target = new Target();
		
		MyProxy myProxy = new MyProxy();// 
		
		// 
		TargetInterface proxy = (TargetInterface) myProxy.getProxy(target);
		
		// 
		proxy.doSomething();
		
	}

}
 
 

좋은 웹페이지 즐겨찾기