我有一个类 Triangle、DrawingTool、Main 类和一个名为 MyProducer 的生产者类。Producer 类有一个将 Triangle 实例注入到 DrawingTool 类的方法。我没有为生产者方法和绘图工具类提供范围(默认为@Dependent)。但是,我为 Triangle 类指定了 @ApplicationScoped 注释。当我查找 DrawingTool 类两次时,我将 2 个不同的 Circle 实例注入到 DrawingTool 实例中。为什么?这是代码
public class DrawingTool {
@Inject @ShapeType(value= ShapeNames.TRIANGLE)
private Shape triangle;
public Shape getTriangle() {
return triangle;
}
public void drawShape(Shape s)
{
s.draw();
}
//////////////////////////////////////////////////
@ApplicationScoped
public class Triangle implements Shape{
private String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Inject
private Logger logger;
public void draw() {
logger.info("drawing triangle " + color);
}
}
///////////////////////////////////////////////////////////////////
public class MyProducer {
@Produces
@ShapeType(value= ShapeNames.TRIANGLE)
public Shape getTriangle( Triangle t)
{
t.setColor("green");
return t;
}
}
////////////////////////////////////////////////////////////////
public static void main( String[] args )
{
Weld weld = new Weld();
WeldContainer container = weld.initialize();
DrawingTool tool = container.instance().select(DrawingTool.class).get();
tool.drawShape(tool.getTriangle());
// change property of triangle to check for instance
tool.getTriangle().setColor("dark Green");
tool.drawShape(tool.getTriangle());
DrawingTool tool1 = container.instance().select(DrawingTool.class).get();
tool1.drawShape(tool1.getTriangle());
weld.shutdown();
}
////////////////////////////////
我得到以下输出
信息:绘制三角形绿色
信息:绘制三角形深绿色
信息:绘制三角形绿色
我期待最后一个打印是深绿色,因为它应该是应该注入到两个 DrawingTool 实例中的同一个 Triangle 实例。请解释为什么会这样?