Ich versuche, Fabrik zu meiner Anwendung zu injizieren. Dafür habe ichWie @ Klasse in Jersey hk2 Fabrik in Java injizieren?
erstelltFactory: 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;
}
erstellen Binder Klasse: 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());
}
}
Datei
Mit Klassen:
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());
}
}
Mein Ressourcen Code ist
@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();
}
I-Ausgang wie bei Störung erhalte:
===>>> Circle draw <<<<========
===>>> Tringle draw <<<<========
===>>> Tringle draw <<<<========
===>>> Square draw <<<<========
java.lang.NullPointerException
com.icube.rest.test.Square.drawTest(Square.java:11)
Warum ich NULL
in Square.java
Klasse für bin immer @Inject DrawShapeFactory d rawShapeFactory; bei drawShapeFactory.execute(new Circle());
Linie?
Inject
funktioniert gut in der Ressourcenschicht, aber innerhalb jeder anderen Klasse gibt es mir NULL exception
.
Was mache ich falsch?
Danke :-)
Der 'Square' geht niemals durch den IoC-Container. Sie können nicht einfach "Square" und Ausnahme HK2 instanziieren, um darüber zu wissen. Sie müssen entweder den "Square" in den gewünschten Ort injizieren oder ihn vom "ServiceLocator" holen. Sie müssen auch den "Square" in Ihrem Ordner binden, damit er im System bekannt ist. –
@peeskillet Ich möchte nur DrawShapeFactory-Klasse in Square.java-Klassendatei injizieren. Kannst du mir bitte dabei helfen? oe Sie können mir einen guten Link von wo ich all diese Details über inject bekommen kann. Danke – unknownbits
Ehrlich, dein Code sieht so verrückt nach mir aus. Es würde mehr Sinn machen mit einem realen Beispiel. Ich möchte keine schlechten Praktiken fördern. Wenn Sie ein echtes Beispiel veröffentlichen und erklären möchten, was Sie wirklich erreichen wollen, werde ich es mir ansehen. Anders als das, wenn Sie einige Ressourcen möchten, können Sie die Links in [diesem Beitrag] (http://stackoverflow.com/a/29275727/2587435) –