簡體   English   中英

如何掃描不在 src/main/java 中的包?

[英]How to scan packages which are not in src/main/java?

面試官問,你將如何掃描不在 src/main/java.. 即.. 你的類路徑中的包。 他還說,當你必須做這類事情時,這種情況非常罕見。

默認情況下,在 spring-boot 中,主應用程序 class 所在的 package 下的所有類都是組件掃描的。 例如,假設您的主要application.javasrc/main/java和 package com.example 所以springboot會掃描@SpringBootApplication com.example.*下的所有類如果其他包中有 bean/components 不是主 package 的子包,則應手動將它們添加為@ComponentScan ,如:

@ComponentScan({“com.example1”,”com.example2”})
@SpringBootApplication
public class SpringbootMainApplication {
public static void main(String[] args) {
        ApplicationContext applicationContext = 
                SpringApplication.run(SpringbootMainApplication.class, args);
    }

}

除此之外,@ComponentScan 注釋還可以與@Configuration注釋類一起提供,以告訴@ComponentScan掃描包。 @ComponentScan without arguments 告訴 Spring 掃描當前的 package 及其所有子包。像:

@Configuration
@ComponentScan
public class SpringGenericConfiguration {
    @Bean
    public ExampleBean exampleBean() {
     return new ExampleBean();
    }
}

Suppose the class SpringGenericConfiguration.java is inside package com.example20.configuration , then spring will scan all classes in the package and in the sub packages if any.

我認為您需要先將文件夾手動添加到 java 構建路徑中,然后再將它們添加到組件掃描中。 如果您使用的是 Eclipse,可以通過右鍵單擊項目 -> 屬性 -> java 構建路徑 -> 源來將它們添加到構建路徑中。 您需要在此處添加src/<path to your additional source>的路徑並啟用它,以便將其識別為源文件夾。 然后你需要使用@ComponentScan 來掃描相關的包。 這里的關鍵是將您的相關代碼放入類路徑中。

我能想到的一種情況是您可能需要進行此類更改的地方是在target/generated-sources ,並且您需要使用這些存根或 bean 來開發您的代碼。

最簡單和最短的答案是您使用完全相同的方式掃描它們,class 或 package 是否在 src/main/java 中並不重要,至少它應該在類路徑中,因此 Z18B5A217C4D0AD239D72D3 知道它並已加載它.

如果 OP 的問題意味着 package 根本不在類路徑中,請說:

不在 src/main/java.. 即.. 你的類路徑中

這個問題沒有意義,為什么要掃描不在 JVM 類路徑中的 package。 即使您可以掃描它,您也無法使用它,因為它沒有加載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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