[英]reflections library inside Wildfly 8.0.2
我正在嘗試使用Reflections庫掃描類,如果將Dynamic Web項目添加到另一個項目(純Java項目)中,則會得到所需的類,但是如果在@Startup
bean中運行,則為空。 這是代碼:
Reflections reflections = new Reflections(
new ConfigurationBuilder().filterInputsBy(
new FilterBuilder.Include(
FilterBuilder.prefix("my.package")
)
).setUrls(
ClasspathHelper.forJavaClassPath()
).setScanners(
new SubTypesScanner(false)
)
);
Set<Class<? extends Object>> testClasses = reflections.getSubTypesOf(Object.class);
tv,goopi應該更改為使用的任何軟件包前綴。 testClasses
Set
為空。
如果相同的代碼正在引用該代碼的另一個項目中運行,而沒有其他更改,則將用包內的所有類填充Set
。
對反射的Maven依賴是:
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.9-RC1</version>
</dependency>
Wildfly 8.2.0。 現在,我可以將提取的文件保存在外部項目中,並使用加載功能,但這不會是應有的動態。
我花了相當長的時間苦苦掙扎,由於它的工作方式,它看起來像沒有完整的Java類路徑(使它變得很沉重),您應該稍后再加載反射。 這主要是由於在EJB初始化階段創建了動態類,其中包括Startup bean。
要加載完整的類路徑(從啟動Bean),請執行urls.addAll(ClasspathHelper.forJavaClassPath());
為了使其跨JEE友好,例如狂放,您需要從Servlet Context偵聽器進行反映。 對我而言,正確的位置在構造函數中,但靜態字段可能有效。
public class GuiceContext implements ServletContextListener
{
@Override
public void contextInitialized(ServletContextEvent servletContextEvent)
{
ClasspathHelper.forWebInfLib(servletContextEvent.getServletContext());
ClasspathHelper.forWebInfClasses(servletContextEvent.getServletContext());
}
嘗試讓您的bean初始化獨立的無依賴項。 您也可以使用Guice這樣的自定義注入器來推動咖啡豆。 在這種情況下,您將使用GuiceServletContextListener類。
您不包括Object.class的直接排除項,因此,此實例中的該啟動bean可能因此無法加載。 new SubTypesScanner(false);
可以在https://github.com/GedMarc/GuiceInjection中找到具有直接實現的org.reflections和guice的完整庫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.