1

我想实现这个 3rd-party 注释以将我的类的字段/属性映射到我的数据库表列。我可以在编译时轻松实现注释(如下面的示例代码所示),但我找不到在运行时执行此操作的方法。(我在运行时使用反射加载库。)

我的问题是如何在运行时加载库时实现相同的映射注释?Byte Buddy 可以为 Android 处理这个吗?

//3rd party annotation code
package weborb.service;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface MapToProperty {
    String property();
}

///////////////////////////////////////// ///

//Here is the implementation using non-reflection
import weborb.service;
    Class Person
    {
        @MapToProperty(property="Person_Name")
        String name;

        @MapToProperty(property="Person_Age")
        int age;

        @MaptoProperty(property="Person_Name")
        public String getName()
        {
            return this.name;
        }

        @MaptoProperty(property="Person_Name")
        public void setName(String name)
        {
            this.name = name;
        }

        @MaptoProperty(property="Person_Age")
        public int getAge()
        {
             return this.age;
        }

        @MaptoProperty(property="Person_Age")
        public void setAge(int age)
        {
            this.age = age;
        }
    }
4

1 回答 1

5

是的,有关详细信息,请参阅文档注释部分

您可以使用AnnotationDescription.Builderby 构建注释:

AnnotationDescription.Builder.ofType(MapToProperty.class)
                             .define("property", "<value>")
                             .build();

结果AnnotationDescription可以作为参数提供给动态类型构建器:

new ByteBuddy()
  .subclass(Object.class)
  .defineField("foo", Void.class)
  .annotateField(annotationDescription)
  .make();

同样,它适用于方法。

于 2016-01-19T07:37:18.383 回答