2013-10-11 80 views
10

在我們的應用程序中,我們遇到了組件掃描的性能問題。它非常慢,其性能不依賴於掃描包中的類數。Spring組件掃描的性能取決於掃描包的大小嗎?

每一行這樣在我們消費滿配置文件:

<context:component-scan base-package="foo.bar" /> 

增加了2分鐘,啓動我們的應用程序的時間。掃描軟件包中的類數量無關緊要 - 對於包含10和1k類的軟件包,我們遇到同樣的延遲。

爲什麼組件掃描的性能不依賴於掃描軟件包的大小?

我們使用混合方法創建spring bean - 我們同時使用xml定義和組件掃描。這可以成爲這種行爲的原因嗎?

+0

我記得在使用AOP時遇到了這樣的問題,並且解決方案是將其設置爲深度封裝,因爲我們可以將其設置爲 – RamonBoza

+1

這可以幫助http://stackoverflow.com/questions/5947713/spring-startup-performance-issues –

+0

@RamonBoza我們已經使用盡可能深的軟件包。正如我寫的,我們正在經歷大大小小的軟件包同樣的放緩。 –

回答

2

Spring做的是通過組件掃描 中提供的包中的所有類,並且如果該類具有組件,存儲庫或服務,它將在上下文中註冊一個bean。所以類的數量很重要。 你只需掃描包含註釋類的包(掃描未註釋的類也需要時間)。 也可以只使用一個組件掃描標籤並列出所有軟件包。只要不重複,使用xml和組件掃描都不會成爲問題。

+0

你確定Spring只掃描指定包中的類嗎?我想到的一個實現是掃描上下文中的所有類,接下來只挑選來自指定包的那些類,然後僅挑選具有適當註釋的類。 –

+0

你可以嘗試一下......在包含帶註釋類的包的組件掃描中刪除一些包,並檢查它們是否在上下文中可用。另請參閱http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s12.html(章節4.12.2自動檢測組件)「自動檢測這些類並註冊相應的bean要求在XML中包含以下元素,其中'basePackage'將是這兩個類的共同父包(或者,可以指定包含每個類的父包的逗號分隔列表)。「 –