1

シングルトン クラスにプロトタイプ オブジェクトを挿入しようとしています。

public class Triangle implements ApplicationContextAware{
private Point pointA;
private ApplicationContext context=null;
Point point=(Point)context.getBean("pointA",Point.class);
public void draw(){
    System.out.println("The prototype point A is ("+point.getX()+","+point.getY()+")");
}
@Override
public void setApplicationContext(ApplicationContext context)
    throws BeansException {
this.context=context;

}
}

座標 x と y を持つ Point Java ファイルを作成しました。

上記のコードをコンパイルしようとすると、次のエラーが発生します

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'triangle' defined in class path resource [Spring.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.david.shape.Triangle]: Constructor threw exception; nested exception is java.lang.NullPointerException
4

1 に答える 1

1
private ApplicationContext context=null;
Point point=(Point)context.getBean("pointA",Point.class);

あなたが呼び出しgetBean()contextいるのは、明らかにnullです。

コンテキストは、Triangle Bean が構築された後、Spring によってそのsetApplicationContext()メソッドが呼び出された後にのみ、Spring によって初期化されます。getBean()そうして初めて、コンテキストを呼び出すことができます。

ところで、ここでは依存性注入を行っていません。これはまさに、Spring のような依存性注入フレームワークが回避するために使用されるものです。ポイントを挿入するには、次のようにします

public class Triangle {

    private Point pointA;

    @Autowired
    public Triangle(@Qualifier("pointA") Point pointA) {
        this.pointA = pointA;
    }

    ...
}
于 2013-05-20T06:41:54.600 に答える