弹簧动态限定符

时间:2015-01-21 14:01:42

标签: spring dependency-injection

我有一个界面Shape

public interface Shape {
    String draw();
}

以上Shape接口的两个实现

@Component("triangle")
public class Triangle implements Shape {
    public String draw() {
        return "drawing Triangle";
    }
}

@Component("circle")
public class Circle implements Shape {
    public String draw() {
        return "Drawing Circle";
    }
}

在我的客户端代码中,如果我必须根据限定符

决定在运行时使用哪个Shape类
 @Autowired
    private Shape shape;
@GET
    @Produces(MediaType.TEXT_HTML)
    @Path("/shape")
    public String getShape(@PathParam("type")
    String type) {
        String a = shape.draw();
        return a;
    }

怎么做? 我想传递“type”作为路径参数来决定在运行时注入哪个Shape对象。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

我可以通过在客户端代码中注入ApplicationContext来找到解决这个问题的方法。

 @Autowired
 private ApplicationContext appContext;

在getBean方法的帮助下查找bean:

@GET
@Produces(MediaType.TEXT_HTML)
@Path("/shape/{type}")
public String getShape(@PathParam("type")
String type) {
    Shape shape = appContext.getBean(type, Shape.class);
    return shape.draw();
}

我希望这可以帮助某人:)