【问题标题】:Spring: How can I debug a BeanCreationNotAllowedException?Spring:如何调试 BeanCreationNotAllowedException?
【发布时间】:2015-05-29 23:28:15
【问题描述】:

我正在尝试将一个新的 Spring bean 添加到我的一个项目中。 bean 是在另一个包中定义和创建的,如下所示:

@Configuration
public class UtilityBeans {
    public static String MY_BEAN_NAME = "my.bean.name";

    @Bean(name = MY_BEAN_NAME)
    public MyUtilBeanClass getMyBeanClass() {
        return new MyUtilBeanClass();
    }
}

我在我的其他包中这样使用它:

@Configuration
@Import({
    UtilityBeans.class
)}
...
    @Resource(name = UtilityBeans.MY_BEAN_NAME) 
    private MyUtilBeanClass myUtilBeans;

在运行时我得到:

错误 原因:org.springframework.beans.factory.BeanCreationNotAllowedException:创建名为“my.bean.name”的bean时出错:当该工厂的单例处于破坏状态时,不允许创建单例bean(不要从BeanFactory中请求bean一个销毁方法的实现!) ...

日志没有给我任何有用的信息,因为堆栈跟踪都在 Spring 库中。我怎样才能找出失败的原因?是资源使用不正确还是bean创建本身有问题?

我正在使用带有 JDK8 的 Spring-4。

【问题讨论】:

  • 将您的日志转至 DEBUG/TRACE 以获取更多信息。我们需要更完整的东西。请提供 MCVE。
  • 您发布的代码中的 myBeanConfig 在哪里?
  • 对不起,我试图混淆/缩小代码的错误。将其修复为正在发生的正确错误。

标签: java spring spring-4


【解决方案1】:

这里的问题是,由于一些重构,bean 是在我的 spring 配置中的 2 个不同点创建的,修复是删除重复的代码。我有相同的 bean 创建代码:

@Bean(name = MY_BEAN_NAME)
public MyUtilBeanClass getMyBeanClass() {
    return new MyUtilBeanClass();
}

...在另一个课程中,我进行了一半的重构。 在这种情况下,我的错误是我没有对所有正在生成的日志文件进行 grep。异常被拆分然后埋入 2 个不同的日志中,一个用于服务器启动,一个用于应用程序运行时。上述异常已发布到应用程序日志。其他日志包含相关异常,指出重复 bean 创建失败,修复是删除重复代码。

【讨论】:

    猜你喜欢
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    相关资源
    最近更新 更多