【问题标题】:How to find all classes with my annotation | Wildfly JavaEE如何使用我的注释查找所有类 | Wildfly JavaEE
【发布时间】:2019-08-09 09:56:50
【问题描述】:

在 JavaEE 部署中查找所有具有特定注释的类的最佳方法是什么?我使用 WildFly ApplicationServer 并创建了自己的注释。在我的部署开始时,我想找到所有带有我的注释的类并缓存它们以供以后访问。我必须做些什么来保护资源?

【问题讨论】:

    标签: java annotations wildfly


    【解决方案1】:

    首先,Wildfly 具有模块化的类加载结构。在Wildfly doc:

    从 JBoss AS 7 开始,类加载与以前的 JBoss AS 版本有很大不同。类加载基于 JBoss Modules 项目。与更熟悉的分层类加载环境不同,WildFly 的类加载基于必须定义对其他模块的显式依赖关系的模块。 WildFly 中的部署也是模块,并且无法访问在应用服务器的 jar 中定义的类,除非定义了对这些类的显式依赖。

    如上所述,如果您有更多的 .ear 或 .war 包,除非明确定义了依赖关系,否则它们无法看到彼此内部的类。每个模块都可以看到自己的类,因此每个模块都应该加载和缓存自己的类。您不能使用单个类和单个方法加载所有类。

    通过下面的代码你可以看到模块中所有加载的类。

    Field f = ClassLoader.class.getDeclaredField("classes");
    f.setAccessible(true);
    
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    Vector<Class> classes =  (Vector<Class>) f.get(classLoader);
    

    【讨论】:

    • 感谢您的回答。 Wildfly 是否不提供诸如过滤器或提供者之类的机制,它会返回一个包含我正在寻找的元素的列表?像 jax-rs 这样的模块如何处理它们的注解?
    • 好点。那正是我所想。我在 google 和 Wildfly 文档中进行了搜索,但没有找到与此主题相关的任何内容。
    猜你喜欢
    • 1970-01-01
    • 2011-08-18
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2016-02-13
    相关资源
    最近更新 更多