2011-03-23 13 views
7

¿Alguien puede darme un buen ejemplo para Java CGLib Mixin uso de clase? Estuve hurgando, ninguno de ellos parece lo suficientemente simple.CGLib Mixin Ejemplo

Respuesta

7

bastante fácil:

import static org.junit.Assert.*; 
import net.sf.cglib.proxy.Mixin; 

import org.junit.Before; 
import org.junit.Test; 


public class MixinTest { 

    @Test 
    public void test() { 
     Mixin mixin = Mixin.create(new Object[]{ new Class1(), new Class2() }); 
     assertEquals(1, ((Interface1)mixin).method1()); 
     assertEquals(2, ((Interface2)mixin).method2()); 
    } 

    private interface Interface1 { 
     public int method1(); 
    } 

    private interface Interface2 { 
     public int method2(); 
    } 

    private static class Class1 implements Interface1 { 

     @Override 
     public int method1() { 
      return 1; 
     } 

    } 

    private static class Class2 implements Interface2 { 

     @Override 
     public int method2() { 
      return 2; 
     } 

    } 

} 

espero que ayude.

1

La cuestión es más amplia que sólo la interfaz de bases de casos mixin, así que aquí está el ejemplo de CGLIB mixin con 2 clases arbitrarias:

import java.lang.reflect.Method; 
import java.nio.charset.Charset; 
import java.util.Locale; 

import net.sf.cglib.proxy.Mixin; 
import net.sf.cglib.proxy.Mixin.Generator; 

public class CglibTest { 

    public static void main(String[] args) throws Exception { 
     Generator gen = new Generator(); 
     gen.setStyle(Mixin.STYLE_EVERYTHING); 
     gen.setDelegates(new Object[]{ Charset.defaultCharset(), Locale.getDefault()}); 
     Mixin mixin = gen.create(); 
     System.out.println(invokeMethod(mixin, "displayName")); 
     System.out.println(invokeMethod(mixin, "getCountry")); 
    } 


    public static Object invokeMethod(Object target, String methodName) throws Exception { 
     Method method = target.getClass().getMethod(methodName); 
     return method.invoke(target); 
    } 

}