春天 - 扫描豆子

时间:2012-08-07 19:00:34

标签: spring spring-mvc

我对Spring bean扫描感到有些困惑。

AFAIK我需要放<context:component-scan base-package="some.package" />

并且Spring将从给定包的根目录中搜索bean。

但是现在在我的应用程序中,如果我从.xml配置文件中删除这一行,并启动Tomcat我得到

INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@4dd1b: defining beans

然后我得到一个很长的bean列表,其中一些来自Spring,但也有一些我希望看到<context:component-scan base-package="some.package" />添加到配置文件中。两个日志之间唯一不同的是控制器方法到地址的映射。如果此行不存在,则不会映射方法。

为什么Spring会检测到这些bean?是什么让Spring扫描我的包以注释类?

如果相关我正在使用Spring 3

编辑: 如果我不删除<context:component-scan base-package="some.package" />我将获得有关预先实例化两次单身人士的信息。所以看起来这些豆子被扫描了两次。

编辑: 似乎在ContextListener加载的一个文件中,我有组件扫描。这就是我将这些豆子列入两次的原因。

3 个答案:

答案 0 :(得分:0)

你的config.xml中必须有<context:component-scan base-package="se.eleon" />,如果你没有放任何东西,春天正在扫描你的所有代码。春天mvc期待它不会发生任何事情。这是春天寻找所有注释等的地方

答案 1 :(得分:0)

您的应用程序上下文XML中是否还有<context:annotation-config/>?如果是这样,它将解释为什么在没有<context:component-scan .../>的情况下初始化bean。

This SO帖子实际上解释了两者之间的区别。

答案 2 :(得分:0)

您是否有两个扫描相同包的调度程序xml配置文件?如果那么bean初始化发生两次。

进行此自动扫描过程的原因是识别@Controller @Autowire等注释。否则这些注释对Spring IOC容器没有任何意义。