2014-01-07 2 views
0

Что такое «Весенний способ» кода, написанный в Javassist. Я знаю, что Spring использует CGLib, но я уверен, что для весеннего мира есть несколько полезных хороших практик.Весенний путь Javassist

ProxyFactory factory = new ProxyFactory(); 
factory.setSuperclass(Dog.class); 
factory.setFilter(
     new MethodFilter() { 
      @Override 
      public boolean isHandled(Method method) { 
       return Modifier.isAbstract(method.getModifiers()); 
      } 
     } 
    ); 

MethodHandler handler = new MethodHandler() { 
    @Override 
    public Object invoke(Object self, Method thisMethod, Method proceed, Object[] args) throws Throwable { 
     System.out.println("Handling " + thisMethod + " via the method handler"); 
     return null; 
    } 
}; 

Dog dog = (Dog) factory.create(new Class<?>[0], new Object[0], handler); 
dog.bark(); 
dog.fetch(); 

Который производит этот выход:

Woof! 
Handling public abstract void mock.Dog.fetch() via the method handler 

Edit:

В настоящее время я использую CGLIB Enhancer, которая включена в Spring 3.2.x и я в сомнении о удобном способе и лучше практики.

Edit:

Я должен сказать, что мои прокси-классы не весной бобы. Весной они не управляются.

ответ

0

Весной вы сделали бы такую ​​вещь с Spring AOP. Это гораздо более высокоуровневый подход, который под капотом использует либо прокси CGLIB, либо JDK, в зависимости от конфигурации.

Вот пример аспект:

@Aspect 
public class LoggingAspect{ 

    static final Logger LOG = LoggerFactory.getLogger(LoggingAspect.class); 
    @Pointcut("call(* *.*(*)") 
    public void methodCall(){} 

    @Before("methodCall()") 
    public void logMethodCall(Joinpoint jp){ 
     LOG.debug("About to call method {} with args {}", jp.getSignature(), jp.getArgs()); 
    } 
} 

Недостатками являются: это работает только на открытых методов объектов, которые управляются весной.

+0

Мой вопрос был упрощенной версией моего требования. На самом деле мне нужен способ создания некоторых классов прокси по запросу. Трудная часть состоит в том, что это абстрактный класс. – Cemo

Смежные вопросы