我对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加载的一个文件中,我有组件扫描。这就是我将这些豆子列入两次的原因。
答案 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容器没有任何意义。