[英]How to scan packages which are not in src/main/java?
面試官問,你將如何掃描不在 src/main/java.. 即.. 你的類路徑中的包。 他還說,當你必須做這類事情時,這種情況非常罕見。
默認情況下,在 spring-boot 中,主應用程序 class 所在的 package 下的所有類都是組件掃描的。 例如,假設您的主要application.java
在src/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.