2

我对 Spring bean-scanning 有点困惑。

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 加载的文件之一中,我进行了组件扫描。这就是为什么我把这些豆子列出了两次。

4

3 回答 3

0

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

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

于 2012-08-08T06:07:01.113 回答
0

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

这个SO post 实际上解释了两者之间的区别。

于 2012-08-07T21:22:14.833 回答
0

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

于 2012-08-07T20:15:40.810 回答