即使在使用ApplicationContextAware之后,Bean也无法访问另一个已定义的bean

时间:2017-11-17 11:19:52

标签: java spring

我是Spring的新手,我正在努力学习如何使用ApplicationContextAware, 所以我有这两个类number.java和number2.java,都在同一个包中

number实现ApplicationContextAware并覆盖

public void setApplicationContext(ApplicationContext context), 它将上下文保存在私有ApplicationContext变量中 - context

我在JavaConfig文件中定义了以下三个bean

package org.penta.test1;

import org.springframework.context.annotation.Bean;

public class numConfig {

@Bean(name="number3")
public number2 getNumber3()
{
    return new number2(7);
}

@Bean(name="number1")
public number getNumber()
{
    return new number(5);
}

@Bean(name="number2")
public number getNumber2()
{
    number n = new number();
    n.reset();
    return n;
}


}

创建bean number2时出现问题, 这就是reset()代码在number.java

中的作用
public void reset()
{
    number2 n2 = (number2)context.getBean("number3");
    n = n2.getNum();
}

我一直收到此错误

Exception caught - org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'number2' defined in org.penta.test1.numConfig2: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.penta.test1.number]: Factory method 'getNumber2' threw exception; nested exception is java.lang.NullPointerException

我似乎无法意识到我做错了什么。有人可以帮忙吗?

如果我删除number2 bean定义,那么代码工作正常,没有错误。 我似乎无法理解为什么number.java即使在意识到它的上下文之后也找不到在同一个上下文中定义的number3 bean。

0 个答案:

没有答案