J'essaye d'injecter l'usine à mon application. Pour cela, je l'ai crééComment @inject classe dans l'usine jersey hk2 en Java?
usine: 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;
}
Créer une classe Binder: DrawShapeBinder.java
public class DrawShapeBinder extends AbstractBinder
{
@Override
protected void configure()
{
bind(DrawShapeFactory.class).to(DrawShapeFactory.class);
}
}
fichier ResourceConfig
public class App extends ResourceConfig
{
public App()
{
packages("com.icube.rest.authorize","com.icube.rest.test");
register(new DrawShapeBinder());
}
}
classes ayant:
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());
}
}
Mon Code ressource est
@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();
}
Je reçois la sortie avec l'erreur comme:
===>>> Circle draw <<<<========
===>>> Tringle draw <<<<========
===>>> Tringle draw <<<<========
===>>> Square draw <<<<========
java.lang.NullPointerException
com.icube.rest.test.Square.drawTest(Square.java:11)
Pourquoi je reçois NULL
dans Square.java
classe pour @Inject DrawShapeFactory d rawShapeFactory; à drawShapeFactory.execute(new Circle());
ligne?
Inject
fonctionne bien à la couche de ressources, mais à l'intérieur de toute autre classe, il me donne NULL exception
.
Qu'est-ce que je fais mal?
Merci :-)
Le 'Square' ne passe jamais par le conteneur IoC. Vous ne pouvez pas simplement instancier 'Square' et l'exception HK2 pour le savoir. Vous devez soit injecter le "Square" là où vous en avez besoin, soit l'obtenir à partir du "ServiceLocator". Vous aurez également besoin de lier le 'Square 'dans votre classeur afin qu'il soit connu dans le système. –
@peeskillet Je veux juste injecter la classe DrawShapeFactory dans le fichier de classe Square.java. Pouvez-vous m'aider s'il vous plaît dans ceci. oe vous pouvez me fournir un bon lien d'où je peux obtenir tous ces détails sur injecter. THanks – unknownbits
Honnêtement, votre code me semble si fou. Cela aurait plus de sens avec un exemple du monde réel. Je ne veux pas encourager de mauvaises pratiques. Si vous voulez donner un exemple réel et expliquer ce que vous voulez vraiment accomplir, je le regarderai. Autre que cela, si vous voulez des ressources, vous pouvez consulter les liens dans [ce post] (http://stackoverflow.com/a/29275727/2587435) –