cglibエージェント
1952 ワード
cglibエージェントを使用するには、2つのパッケージ(asm-3.3.1.jar、cglib-2.2.2.jar)ガイドパッケージをインポートする必要があります.この2つのパッケージが互換性があるかどうかを確認します.
1飛行機類:
2.エージェントクラス:
3.テストクラス:
4.result:
飛行機が離陸する.飛行機が飛んでいます....飛行機は欠航し、2000 kmを飛んだ
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を飛んだ