cglibエージェント

1952 ワード

cglibエージェントを使用するには、2つのパッケージ(asm-3.3.1.jar、cglib-2.2.2.jar)ガイドパッケージをインポートする必要があります.この2つのパッケージが互換性があるかどうかを確認します.
1飛行機類:
package com.jxufe.cglibproxy;
/**
 *    
* @author jack
* @version     :2016 5 9    10:40:05
*
 */
public class Airplane {
   public void fly(){
	   System.out.println("       。。。。。");
   }


}

2.エージェントクラス:
package com.jxufe.cglibproxy;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;



/**
 *           (cgblib  )
* @author jack
* @version     :2016 5 9    10:43:45
*
 */
public class AirplaneCGLibProxy implements MethodInterceptor{
 
	private Enhancer enhancer= new Enhancer();
	/**
	 * 
	 *@param clazz          
	 *@return        
	 */
	public Object getProxy(Class<?> clazz){
		//        
		enhancer.setSuperclass(clazz);
		enhancer.setCallback(this);
		//                
		return enhancer.create();
	}
	/**
	 * param:arg0         
	 * param:arg1        
	 * param:arg2            
	 * param:arg3:      
	 * return :            
	 */
	public Object intercept(Object arg0, Method arg1, Object[] arg2,
			MethodProxy arg3) throws Throwable {
		beforeLogic();
		//            
		Object result =  arg3.invokeSuper(arg0, arg2);
		afterLogic();
		return result;
	}
	/**
	 *            
	 */
	public void afterLogic(){
		System.out.println("    ,   2000km");
	}
	/**
	 *            
	 */
	public void beforeLogic(){
		System.out.println("    。");

	}
}

3.テストクラス:
package com.jxufe.cglibproxy;

public class CglibTest {
	public static void main(String[] args) {
		AirplaneCGLibProxy proxy = new AirplaneCGLibProxy();

		Airplane craftplane = (Airplane) proxy.getProxy(Airplane.class);
		craftplane.fly();
	}
}

4.result:
飛行機が離陸する.飛行機が飛んでいます....飛行機は欠航し、2000 kmを飛んだ