在运行时将方法名称转换为bean名称?

And*_*ite 6 java aop javabeans

我在当前项目中使用BeanBinding很多,所以我的代码看起来像......

TypeA objA;
TypeB objB;
Bindings.createAutoBinding(UpdateStrategy.READ, 
    objA,   BeanProperty.create("X"),
    objB,   BeanProperty.create("X"))
    .bind();
Run Code Online (Sandbox Code Playgroud)

objAobjB是有一个类的实例setX()方法.问题在于,如果我重构setX,setY那么我需要搜索这些字符串属性名称.我意识到我可以为属性名创建静态最终字符串但是如果我能让编译器为我做的工作,那就更好了.

理想情况下,我希望能够做到的是......

TypeA obja;
TypeB objB;
Bindings.createAutoBinding(UpdateStrategy.READ, 
    objA,   BeanProperty.create( Magic.returnBeanName(TypeA.class).getX() ),
    objB,   BeanProperty.create( Magic.returnBeanName(TypeB.class).setX() )
    .bind();
Run Code Online (Sandbox Code Playgroud)

看起来这可能通过一些代码综合和/或方面来实现.

Jer*_*emy 1

黑暗中的完整拍摄,但也许returnBeanName可以使用 javassist 创建一个与 bean 类似的不同类,只不过它将 getter 的返回类型修改为 String 并返回属性名称?

例如,如果您的 bean 如下所示:

public class Foo{
    private int x;

    public int getX(){
        return x;
    }

    public void setX(int x){
        this.x= x;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后动态创建一个不同的类,如下所示:

public class FooMeta{
    public String getX(){
        return "x";
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来有点疯狂,但写起来很有趣。