java - 正则表达式创建代理类

标签 java regex proxy

我需要为一个类创建一个代理。我无权访问具体主题,只能访问主题界面。我还有一个工厂方法来创建原始实现的实例。

如果我使用 Eclipse,我可以获得每个方法的 stub :

@Override
public R1 method(T1 p1) {
    // TODO Auto-generated method stub
        return null;
}

我需要创建这样的实现:

@Override
public R1 method(T1 p1) {
    return instance.method(p1);
}

因为有很多方法我使用正则表达式进行搜索和替换。搜索:

public ([a-z,A-Z,\.]*) ([a-z,A-Z]*)\(([a-z,A-Z]* ([a-z,A-Z]*))?\) \{\r\n([ ,\t]*)// TODO Auto-generated method stub\r\n[ ,\t]*return [0-9,a-z,A-Z]*\;

并替换为:

public \1 \2\(\3\) \{\r\n\5return instance\.\2\(\4\);

有更好的解决方案吗?

另一个问题是采用更多参数的方法:

@Override
public R1 method(T1 p1, T2 p2) {
    // TODO Auto-generated method stub
    return null;
}

我发现的唯一解决方案是为每个参数数量使用不同的搜索替换对。有更好的解决办法吗?

最佳答案

最简单的解决方案可能就是使用 IDE。例如,在 Netbeans 7 中,您可以编写以下框架:

public class MyProxy implements SomeInterface {
    private SomeInterface instance;

}

然后将光标放在类中,点击 ALTInsert,选择“委托(delegate)方法”,选择接口(interface)的所有方法,然后单击“生成”。

另一种更动态的可能性是使用 java.lang.reflect.Proxy jdk的类。这允许您在运行时定义一个实现给定接口(interface)的类:

public static SomeInterface create() {
    return (SomeInterface)Proxy.newProxyInstance(MyProxy.class.getClassLoader(), new Class[]{SomeInterface.class}, new InvocationHandler() {
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            if ("method1".equals(method.getName())) {
                // Some special logic for this method
                return null;
            } else {
                // delegate all other methods
                return method.invoke(proxy, args);
            }
        }
    });
}

关于java - 正则表达式创建代理类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9055496/

相关文章:

java - 如何在不知道行 UNTIL CREATION 的情况下将 JButton (JAVA) 文本拆分为多行

java - AspectJ 建议不会在 Maven 多模块设置中触发

javascript - 正则表达式定义边界但不捕获它来替换 - javascript

iis - 带有phantomjs的cntlm代理

tomcat - Sonar 3.7 XML 配置文件 XHTML 验证失败

java - 自动将用户加入 Telegram channel ?

java - JPA : illegal attempt to dereference collection

java - 使用正则表达式解析文本

javascript - jQuery 中仅允许所有语言的字母数字

ios - CocoaPods 设置太慢,如何在终端中设置代理