私はアプリケーションに工場を注入しようとしています。このために私はジャージーの@injectクラスの方法hk2 factory in java?
工場作成しました:DrawShapeFactory.java
public class DrawShapeFactory implements Factory<Shape>
{
public void execute(Shape s)
{
s.draw();
}
@Override
public void dispose(Shape shape)
{
// TODO Auto-generated method stub
}
@Override
public Shape provide()
{
// TODO Auto-generated method stub
return null;
}
をバインダークラスを作成します。DrawShapeBinder.java
public class DrawShapeBinder extends AbstractBinder
{
@Override
protected void configure()
{
bind(DrawShapeFactory.class).to(DrawShapeFactory.class);
}
}
ResourceConfigのは
public class App extends ResourceConfig
{
public App()
{
packages("com.icube.rest.authorize","com.icube.rest.test");
register(new DrawShapeBinder());
}
}
を提出
持つクラス:
Shape.java
public class Shape
{
public void draw()
{
}
}
Circle.java
public class Circle extends Shape
{
public void draw()
{
System.out.println("===>>> Circle draw <<<<========");
}
}
Tringle.java
public class Tringle extends Shape
{
public void draw() {
System.out.println("===>>> Tringle draw <<<<========");
}
}
Square.java class having
@Inject
public class Square extends Shape
{
@Inject DrawShapeFactory drawShapeFactory;
public void drawTest()
{
System.out.println("===>>> Square draw <<<<========");
drawShapeFactory.execute(new Circle());
}
}
マイリソースコードは、私は次のようにエラーが発生して出力を取得しています
@SuppressWarnings({"cast"})
@Path("/auth")
public class AuthResource
{
//inject here
@Inject DrawShapeFactory drawShapeFactory;
@POST
@Path("test")
public Detail test()
{
Shape shape1 = new Circle();
shape1.draw();
Shape shape2 = new Tringle();
shape2.draw();
drawShapeFactory.execute(new Tringle());
Square s= new Square();
s.drawTest();
}
です:私はためNULL
Square.java
でクラスを取得していますなぜ
===>>> Circle draw <<<<========
===>>> Tringle draw <<<<========
===>>> Tringle draw <<<<========
===>>> Square draw <<<<========
java.lang.NullPointerException
com.icube.rest.test.Square.drawTest(Square.java:11)
@Inject DrawShapeFactory d rawShapeFactory; at drawShapeFactory.execute(new Circle());
行?
Inject
はリソースレイヤで正常に動作していますが、他のクラスではNULL exception
を与えています。
私は間違っていますか?
おかげで
'Square 'はIoCコンテナを通過しません。あなたはそれについて知るために 'Square'と例外HK2をインスタンス化することはできません。 'Square'を必要な場所に挿入するか、' ServiceLocator'から取得する必要があります。システム内で認識されるように、バインダー内の 'Square 'もバインドする必要があります。 –
@peeskillet私は、Square.javaクラスファイルにDrawShapeFactoryクラスを挿入したいだけです。これで私を助けてくれますか?あなたは私が注射についてのこのすべての詳細を得ることができるところから私に良いリンクを提供することができます。感謝 – unknownbits
正直なところ、あなたのコードはとても狂っています。実際の世界の例ではより意味をなさないでしょう。私は悪い習慣を奨励したくありません。実際の事例を投稿し、本当に達成したいことを説明したい場合、私はそれを見ていきます。それ以外に、いくつかのリソースが必要な場合は、[this post](http://stackoverflow.com/a/29275727/2587435) –