首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring 3.0无法在运行时获取自定义批注

Spring 3.0无法在运行时获取自定义批注
EN

Stack Overflow用户
提问于 2011-10-21 16:34:56
回答 2查看 1.2K关注 0票数 3

我正在使用spring,并尝试向Entity-Bean添加一个自定义注释。我想要做的就是通过反射访问带有自定义注释@ runtime的字段。问题是,尽管字段上有多个Annotation,但它们都不能在运行时访问:

代码语言:javascript
复制
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ChangeableField {

}

实体:

代码语言:javascript
复制
public class Order {

    @NotNull
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(pattern = "dd:MM:yyyy HH:mm")
    @ChangeableField
    private Date scheduledStart;

    @NotNull
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(pattern = "dd:MM:yyyy HH:mm")
    @ChangeableField
    private Date scheduledEnd;

    //...
}

我完全不知道该怎么办

代码语言:javascript
复制
Order.class.getField("scheduledStart").getAnnotation(ChangableField.class);

返回始终为空。(顺便说一句,此字段上所有声明的注释均为空)

也许这跟春天有关?

如果有任何帮助,我将不胜感激!

提前感谢

编辑

我不知道为什么,但现在它工作正常:

代码语言:javascript
复制
for (Field currentField : order.getClass().getDeclaredFields()) {
    if (currentField.getAnnotation(ChangeableField.class) != null
    && map.containsKey(currentField.getName())) {
         //..

谢谢你的帮忙

顺便说一下,这只是这篇文章中的一个打字错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-21 16:56:25

您的注释属于"ChangeableField“类,但是您检索的是"ChangableField”(注意缺少的"e")。这只是一篇文章中的打字错误,还是你没有找回你认为自己是什么?

票数 0
EN

Stack Overflow用户

发布于 2011-10-21 16:57:19

试试这个:

代码语言:javascript
复制
Order.class
     .getDeclaredField("scheduledStart")
     .getAnnotation(ChangableField.class);

Class.getField(fieldname)检索类和所有超类的公共字段。您的字段是私有的,因此您需要Class.getDeclaredField(fieldname),它检索所有可见性的字段,但仅限于此类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7846938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档