【发布时间】:2019-08-09 09:56:50
【问题描述】:
在 JavaEE 部署中查找所有具有特定注释的类的最佳方法是什么?我使用 WildFly ApplicationServer 并创建了自己的注释。在我的部署开始时,我想找到所有带有我的注释的类并缓存它们以供以后访问。我必须做些什么来保护资源?
【问题讨论】:
标签: java annotations wildfly
在 JavaEE 部署中查找所有具有特定注释的类的最佳方法是什么?我使用 WildFly ApplicationServer 并创建了自己的注释。在我的部署开始时,我想找到所有带有我的注释的类并缓存它们以供以后访问。我必须做些什么来保护资源?
【问题讨论】:
标签: java annotations wildfly
首先,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);
【讨论】: