当前位置: 首页 > 面试题库 >

使用Spring Java注释扫描

龙德润
2023-03-14
问题内容

我有几个需要用名称注释的类,因此我将注释定义为

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface JsonUnmarshallable {
    public String value();
}

现在,需要此注释的类定义为

@JsonUnmarshallable("myClass")
public class MyClassInfo {
<few properties>
}

我使用下面的代码来扫描注释

private <T> Map<String, T> scanForAnnotation(Class<JsonUnmarshallable> annotationType) {
    GenericApplicationContext applicationContext = new GenericApplicationContext();
    ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(applicationContext, false);
    scanner.addIncludeFilter(new AnnotationTypeFilter(annotationType));
    scanner.scan("my");
    applicationContext.refresh();
    return (Map<String, T>) applicationContext.getBeansWithAnnotation(annotationType);
}

问题是返回的映射包含,["myClassInfo" -> object of MyClassInfo]但是我需要映射包含"myClass"作为键,这是Annotation的值而不是bean名称。

有办法吗?


问题答案:

只需获取注释对象并提取值即可

Map<String,T> tmpMap = new HashMap<String,T>();
JsonUnmarshallable ann;
for (T o : applicationContext.getBeansWithAnnotation(annotationType).values()) {
    ann = o.getClass().getAnnotation(JsonUnmarshallable.class);
    tmpMap.put(ann.value(),o);
}
return o;

让我知道是否不清楚。



 类似资料:
  • 我使用Spring 3.1和无融资创业应用程序使用和属性。 实际启动是用 此配置类的注释为 这个很好用。然而,我想更具体地介绍我扫描的软件包,所以我尝试了。 然而,这失败了,错误告诉我它找不到使用注释指定的组件。 做我想做的事的正确方法是什么? 谢啦

  • 我有一把刀: 问题是,当我试图使用DAO进行加载调用时,使用DynamoDBMapper以field d1作为哈希键来获取项目,它会抛出一个DynamoDBExc0019,说:为公共DAO. getField2()找到了空键,但实际上表的值对应于field d2。问题,这是因为Lombok注释而不是手动突变代码,还是一般来说我们一起使用Lombok和DynamoDBAnnotions?

  • 我知道如何单独使用自动元件扫描和构造器注入。http://www.mkyong.com/spring/spring-auto-scanning-components/http://www.dzone.com/tutorials/java/spring/spring-bean-constructor-injection-1.html 是否可以将自动组件扫描与构造函数注入结合使用?使用自动组件扫描时,

  • 问题内容: 如何在React组件的方法内部使用注释? 我有以下组成部分: 我的评论显示在用户界面中。 在组件的渲染方法中应用单行和多行注释的正确方法是什么? 问题答案: 因此,在方法内允许使用注释,但为了在JSX中使用它们,必须将它们用大括号括起来并使用多行样式的注释。 您可以在此处阅读有关注释如何在JSX中工作的更多信息

  • 我正在使用从以下依赖项导入的Swagger/OpenAPIV3注释创建应用程序的API描述: 其中一个批注是批注,它接受名为的属性,该属性允许字符串数组: 现在,我想使用在枚举类上构造的自定义方法,该方法返回允许的字符串数组,因此不需要在每次向枚举添加类型时添加该方法。以便我们可以这样使用它: 现在这是无法编译的,因为在执行注释时不知道该方法。是否有这样的解决方案允许在SwaggerV3注释属性值

  • 我使用AWS加密客户端。下面的代码抛出错误为 错误:@DoNotTouch不适用于现场 然而,如果我给出@DoNotTouch配置,如下所示[使用getter和setter] 这很好用。我猜lombok生成的getter和setter不会被AmazoneCryptionClient识别 我在跟踪这个aws doc:https://aws.amazon.com/blogs/developer/cli