我对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然后我得到了一个很长的beans列表,其中一些来自Spring,但也有一些我希望在配置文件中添加<context:component-scan base-package="some.package" />的beans。如果此行不存在,则不会映射方法。
为什么Spring要检测这些bean?是什么让Spring扫描我的包中带注释的类?
如果相关,我使用的是Spring3
编辑:如果我不删除<context:component-scan base-package="some.package" />,我会得到两次预实例化单例的信息。所以看起来这些豆子被扫描了两次。
编辑:似乎在ContextListener加载的一个文件中,我进行了组件扫描。这就是为什么我把那些豆子列了两次。
发布于 2012-08-08 04:15:41
你必须在你的config.xml中有<context:component-scan base-package="se.eleon" />,在那里spring会扫描你所有的代码,如果你不在里面放任何东西,什么都不会发生,因为spring mvc期待它。这就是spring寻找所有注解的地方
发布于 2012-08-08 05:22:15
您的应用程序上下文XML中是否也有<context:annotation-config/>?如果是这样的话,这就解释了为什么在没有<context:component-scan .../>的情况下初始化bean。
This所以post实际上解释了两者之间的区别。
发布于 2012-08-08 14:07:01
是否有两个dispatcher xml配置文件正在扫描同一个包?如果so初始化发生了两次。
使用这个自动扫描过程的原因是identify you注解,比如@Controller、@Autowire等等。否则,这些注解对Spring IOC容器没有任何意义。
https://stackoverflow.com/questions/11852385
复制相似问题