如何在java的jersey hk2工厂中@inject类?
我正在尝试将工厂注入到我的应用程序中。为此,我创造了 工厂:DrawShapeFactory.java如何在java的jersey hk2工厂中@inject类?,java,jersey-2.0,factory-pattern,inject,hk2,Java,Jersey 2.0,Factory Pattern,Inject,Hk2,我正在尝试将工厂注入到我的应用程序中。为此,我创造了 工厂: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
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;
}
public class DrawShapeBinder extends AbstractBinder
{
@Override
protected void configure()
{
bind(DrawShapeFactory.class).to(DrawShapeFactory.class);
}
}
资源配置文件
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()
{
}
}
public class Circle extends Shape
{
public void draw()
{
System.out.println("===>>> Circle draw <<<<========");
}
}
public class Tringle extends Shape
{
public void draw() {
System.out.println("===>>> Tringle draw <<<<========");
}
}
Circle.java
public class Shape
{
public void draw()
{
}
}
public class Circle extends Shape
{
public void draw()
{
System.out.println("===>>> Circle draw <<<<========");
}
}
public class Tringle extends Shape
{
public void draw() {
System.out.println("===>>> Tringle draw <<<<========");
}
}
Square.java类具有
@inject
public class Square extends Shape
{
@Inject DrawShapeFactory drawShapeFactory;
public void drawTest()
{
System.out.println("===>>> Square draw <<<<========");
drawShapeFactory.execute(new Circle());
}
}
我得到的输出错误如下:
===>>> Circle draw <<<<========
===>>> Tringle draw <<<<========
===>>> Tringle draw <<<<========
===>>> Square draw <<<<========
java.lang.NullPointerException
com.icube.rest.test.Square.drawTest(Square.java:11)
==>>>圆圈绘制
Inject在资源层工作正常,但在任何其他类中,它都会给我NULL异常
注入器和注入器都需要知道HK2才能使@Inject
注释起作用。Jersey资源隐式支持HK2,因此您可以在资源中绑定工厂,而class Square不支持HK2(在HK2上下文中未知,因为您没有在绑定器中绑定工厂)
除此之外,我可以说您的DI概念不清楚,
您的绑定器应该将工厂绑定到实例,而不是绑定工厂本身,您应该直接注入形状
因为。例如
bindFactory(DrawShapeFactory.class).to(Shape.class)
并实现提供方法,以创建和返回形状类型的实例。现在出现此错误:多重异常有3个异常。它们是:1。org.glassfish.hk2.api.UnsatifiedDependencyException:SystemInjecteeImpl(requiredType=DrawShapeFactory,parent=AuthResource,限定符={},position=-1,optional=false,self=false,unqualified=null,1117365981)下推?认真地无论如何,如果您尝试了我的解决方案,那么您将@Inject
Shape
而不是DrawShapeFactory
。如果您只是想以某种方式将工厂注入到Square中,您可以执行bind(DrawShapeFactory.class).to(DrawShapeFactory.class)代码>绑定(Square.class).to(Sqaure.class)
然后执行@injectsquare代码>在AuthResource中,这样每当调用AuthResource时,它都会要求HK2创建并注入一个Square实例,然后@Inject in Square类将按照您的意愿工作。但让我再告诉你一次,你所尝试的完全是疯狂的。工厂也是一种服务,可以作为自身注入,但通常不会这样做。当您只执行bindFactory(DrawShapeFactory.class).to(Shape.class)时,即将DrawShapeFactory和hk2注册表中的形状作为可注入其他服务的服务,Square
从不通过IoC容器。您不能只是实例化Square
和异常HK2来了解它。您需要将Square
插入需要它的任何位置,或者从ServiceLocator
获取它。您还需要在活页夹中绑定Square
,以便在系统中知道它。@peeskillet我只想在Square.java类文件中插入DrawShapeFactory类。你能在这方面帮助我吗。oe您可以为我提供一个很好的链接,从那里我可以获得有关inject的所有详细信息。谢天谢地,我觉得你的代码太疯狂了。用一个真实世界的例子会更有意义。我不想鼓励任何不良行为。如果你想发布一个真实的例子,并解释你真正想要完成的事情,我会看看。除此之外,如果您需要一些资源,可以在中查看链接