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

标签 java javabeans aop

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

TypeA objA;
TypeB objB;
Bindings.createAutoBinding(UpdateStrategy.READ, 
    objA,   BeanProperty.create("X"),
    objB,   BeanProperty.create("X"))
    .bind();

其中 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();

这似乎可以通过一些代码合成和/或方面来实现。

最佳答案

完全蒙在鼓里,但也许 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;
    }
}

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

public class FooMeta{
    public String getX(){
        return "x";
    }
}

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

关于java - 在运行时将方法名称转换为 bean 名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6985706/

相关文章:

java - 如何使用 aspectJ 快速修改已编译的 java 类行为

java - spring aop - 链接多个方面

java - 开头包含 '[' 的字符串匹配错误

java - 如何在TextView中插入 "<<"文本?

java - 使用循环设置 Bean 的属性

java - 在应用程序服务器中的 Maven 模块之间共享 Java Bean

java - 何时在 Websphere Commerce 中使用访问 bean 或数据 bean?

java - 使用立即调度程序和根本不使用调度程序之间的区别

java - 如何在特定位置放置组件?

java - 如何在 Guice 中定义 AOP 切入点