java - 如何拦截java中的方法

标签 java spring methods intercept

方法如下:

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;
}

最佳答案

使用aop编程。例如,尝试阅读有关 AspectJ 的内容。

Ex 代码:

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Service;

@Aspect
@Service
public class AspectDemo {

@Around("aop1()" ) 
public Object intercept(ProceedingJoinPoint joinPoint) throws Throwable {
   for (Object obj : joinPoint.getArgs()) {
      LOG.debug(obj);
   }
}

@Pointcut("execution(*my.example.packcage.startModule.*(..))")
  public void aop1() {
}

关于java - 如何拦截java中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31587931/

相关文章:

java - 如何用java制作小警报通知

java - 在具有多种组合的 xml 文件内使用 PointCut 表达式

java - 无法从JAVA中同一类的另一个方法调用方法

java - 使用方法和数组的问题

java - 如何使用java中的方法从大字符串中删除相同的字符

java - Android 通过单击按钮删除动态创建的微调器和按钮

java - Activity 背景音频

java - Lombok 正在命令行中工作,但不在 "Run Java Application"中(Eclipse

java - Eclipse Java 中的错误 : java. lang.ClassNotFoundException : com. mysql.jdbc.driver

java - 针对 openjpa 上的原始类型调用带有后缀 "IN"的 spring data jpa 查询方法时出现异常