簡體   English   中英

Wildfly 8.0.2中的反射庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM