探究basepackages

一、什麼是basepackages

在使用Java開發框架時,我們需要使用大量的類和包。本質上,姑且可以把包代入為類的集合體,是為Java中位於同一層次、功能相近的類的集合。如:

org.springframework.boot.autoconfigure.web.servlet 
 

這個包下面有DispatcherServletAutoConfiguration類,它背後有下面兩個類:

org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter;

在Spring Boot中,當我們沒有配置任何Configure類時,都是使用一些默認的配置。默認的過程就是通過配置類來完成的,在Spring Boot中,對於以上兩個類就可以將它們看作是默認配置類。

這樣,Spring Boot就知道了我們需要使用Web MVC這個框架,並且自動配置了相關的資源。

二、為什麼要設置basepackages

在Spring Boot中,我們可以使用註解@Import來引入配置文件,也可以使用@ImportResource來引入XML文件,並且我們也可以使用@ComponentScan來掃描一些@Component註解的類,但是對於某些等級關係,或者優先順序搭配較為複雜的bean,我們還需要使用@Configuration註解的配置類來進行註冊。

這時候,我們需要設置basepackages這個屬性來掃描我們@Configuration註解的配置類所在的包,讓Spring Boot能夠自動將它們註冊成bean。

示例如下:

@Configuration
@ComponentScan(basePackages = {"com.example.demo"})
public class ExampleConfiguration {
    // ...
}

三、如何設置basepackages

設置basepackages是比較簡單的,我們在@Configuration註解的配置類上面添加@ComponentScan註解,並設置basePackages屬性即可。

示例如下:

@Configuration
@ComponentScan(basePackages = {"com.example.demo"})
public class ExampleConfiguration {
    // ...
}

這個例子中,Spring Boot會掃描com.example.demo包下的所有類,然後自動註冊成bean。

四、使用多個basepackages

有時候,我們需要同時跨多個包進行掃描,這時候就需要設置多個basepackages了。

示例如下:

@Configuration
@ComponentScan(basePackages = {"com.example.demo.controller", "com.example.demo.service"})
public class ExampleConfiguration {
    // ...
}

這個例子中,Spring Boot會掃描com.example.demo.controller和com.example.demo.service包下的所有類,並自動註冊成bean。

五、過濾不需要掃描的包

如果在某個較大的包下,有一些我們不想被Spring Boot掃描到的類,那麼我們可以使用excludeFilters來進行排除。

示例如下:

@Configuration
@ComponentScan(basePackages = {"com.example.demo"}, excludeFilters = {
    @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = {MyBeanToIgnore1.class, MyBeanToIgnore2.class})
})
public class ExampleConfiguration {
    // ...
}

這個例子中,Spring Boot會掃描com.example.demo包下的所有類,除了MyBeanToIgnore1和MyBeanToIgnore2,這兩個類將不會被自動註冊成bean。

六、總結

在Spring Boot中,basepackages是非常重要的一個屬性,它能夠讓我們方便的進行bean的自動註冊,並且支持多個basepackages的設置,如果我們需要對某些包或類進行過濾,還可以使用excludeFilters屬性來進行排除操作。

原創文章,作者:FOFB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/138425.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FOFB的頭像FOFB
上一篇 2024-10-04 00:19
下一篇 2024-10-04 00:20

相關推薦

發表回復

登錄後才能評論