2012-08-07 93 views
2

我對春豆掃描有點困惑。春季 - 豆類掃描

據我所知,我需要把<context:component-scan base-package="some.package" />

和Spring將從給定包豆根搜索。

但現在我的應用程序,如果我刪除從.xml配置文件中這一行,並啓動Tomcat的,我得到

INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.s[email protected]4dd1b: defining beans 

,然後我得豆的一個長長的清單,其中一些是從春,但也有那些我希望看到<context:component-scan base-package="some.package" />添加到配置文件。兩個日誌之間唯一不同的是控制器方法到地址的映射。如果此行不存在,方法不會映射。

爲什麼Spring會檢測那些bean?什麼是春季掃描我的包註釋類?

如果是相關的,我使用Spring 3

編輯: 如果我不刪除<context:component-scan base-package="some.package" />我得到關於預實例單身信息的兩倍。所以它看起來像這些豆被掃描兩次。

編輯: 看來,在由ContextListener加載的文件之一,我有組件掃描。這就是爲什麼我把這些豆列出了兩次。

回答

0

你的config.xml文件中必須有<context:component-scan base-package="se.eleon" />這就是spring在掃描所有代碼的情況下,如果你沒有放入任何東西,那麼cuz spring mvc會期待它。這是春季正在尋找所有註釋的地方等。

+0

問題是,即使沒有'context:component-scan',Spring似乎也檢測到我的bean,這就是問題所在,我想知道爲什麼? – Andna 2012-08-07 20:18:58

0

您的應用程序上下文XML中是否也有<context:annotation-config/>?如果是這樣,這就可以解釋爲什麼豆沒有被初始化爲<context:component-scan .../>

This SO貼子實際上解釋了兩者之間的差異。

+0

我使用Eclipse搜索了我的項目中的所有文件,並且此行只在servlet-context.xml中遇到。準確地說,我們有四個.xml文件:root-context.xml,servlet-context.xml,security-context.xml和data-context.xml – Andna 2012-08-07 21:29:39

+0

我猜這足以讓你的bean被掃描。你有沒有嘗試刪除它,看看會發生什麼? – mindas 2012-08-07 21:35:56

+0

畢竟似乎我有兩次寫入上下文:組件掃描,抱歉的所有麻煩。 – Andna 2012-08-07 22:23:02

0

你有兩個正在掃描相同包的調度器XML配置文件?如果這樣的bean初始化發生兩次。

有這個自動掃描過程的原因是識別你的註釋像@Controller @Autowire等,否則這些註釋對Spring IOC容器沒有任何意義。