Вот метод:Как перехватить метод в Java
public static boolean startModule(Module mod, ServletContext servletContext, boolean delayContextRefresh)
Вот вызов метода в Java файл:
WebModuleUtil.startModule(module, getServletContext(), false);
Я не могу делать какие-либо изменения в эти файлы, но я хочет перехватить метод и добавить некоторые из моего кода (я хочу доступ к параметрам, а)
код, который я написал в другом файле Java, но не увенчались успехом:
public void main(String[] args) throws Exception {
Module module = null;
WebModuleUtil wmb = new WebModuleUtil();
ProxyFactory pf = new ProxyFactory(wmb);
pf.addAdvice(new MethodInterceptor() {
public Object invoke(MethodInvocation invocation) throws Throwable {
if (invocation.getMethod().getName().startsWith("start")) {
System.out.println("method " + invocation.getMethod() + " is called on " + invocation.getThis()
+ " with args " + invocation.getArguments());
System.out.println("********************");
Object ret = invocation.proceed();
System.out.println("method " + invocation.getMethod() + " returns " + ret);
return ret;
}
return null;
}
});
WebModuleUtil proxy = (WebModuleUtil) pf.getProxy();
proxy.startModule(module, getServletContext(), false);
}
private static ServletContext getServletContext() {
// TODO Auto-generated method stub
return null;
}
Вы говорите, что вы не можете изменить класс WebModuleUtil, но как насчет классов, которые используют этот метод? Не могли бы вы изменить способ его вызова? –
вам необходимо запрограммировать аспект. Аспекты подходят для такой задачи. –
@Pablo Нет, я не могу –