Spring实例化了两次bean

时间:2011-08-10 20:21:11

标签: java spring javabeans

我的businessAplicationContext.xml中有几个bean,一切正常,直到我添加了一个名为:

的新bean
  

< bean id =" TcmLogManager"类=" ar.com.southend.tim.backend.util.logging.TcmLogManager" />

这个TcmLogManager只是实例化一个java.util.logging.StreamHandler,这样就可以存储一些日志条目。

问题是Spring实例化了这个bean 2次...虽然只有1个定义(如果我用.xml复制具有不同id的行,它会创建4个对象......依此类推...)

我还将范围定义为" singleton"但它没有用。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

检查上下文文件中的<context:component-scan>或其他扫描标记。这些强制Spring扫描源文件以获取组件类。如果您需要多次扫描,则应使用exclude / include过滤器修剪扫描。您可以使用嵌套的xml节点定义过滤器。 正如@adarshr指出的那样,第二个构造函数调用可以是一个代理bean,用于链接AOP方面。

答案 1 :(得分:0)

您描述问题的方式最可能的原因是,在创建ApplicationContexts时,该bean定义所在的上下文文件使用了两次 - 可能在同一个文件中使用两次,不知何故,或者两个不同的文件。当Spring启动时,它会在INFO级别记录特定BeanFactory中存在的所有bean。您可以检查该列表以确切了解哪些bean居住在哪里。在日志中搜索短语“定义bean”以找到它。