CDI bean的传递注入

问题描述 投票:0回答:1

我有一个REST控制器

@Path("/greet")
@RequestScoped
public class GreetController {

    @Inject
    private GreeterService greeterService;

    @GET
    @Path("{name}")
    @Produces(TEXT_PLAIN)
    public String greet(@PathParam("name") String name) {
        return greeterService.greet(name);
    }
}

使用GreeterService的>]

@RequestScoped
public class GreeterService {

    @Inject
    private Greeter greeter;

    public String greet(String name) {
        return greeter.greet(name);
    }
}

GreeterService本身注入了具有两个实现的接口

@RequestScoped
@Hello
public class HelloGreeter implements Greeter {

    @Override
    public String greet(String name) {
        return "Hello " + name;
    }
}

@RequestScoped
@Whazzup
public class WhazzupGreeter implements Greeter {

    @Override
    public String greet(String name) {
        return "Whazzup " + name;
    }
}

[@Whazzup@Hello只是限定词。

我正在尝试根据GreetController中使用的限定符将Greeter-接口的正确实现注入到GreeterService中。使用CDI甚至可能吗?一个简单的解决方法当然是每个预选赛都有两个GreeterService,但这似乎是一个坏主意,因为添加新的预选赛时GreeterService的数量会增加。

当然,这只是一个基本示例,没有必要使用GreeterServcie,但不允许将我的公司代码发布到StackOverflow,因此我必须实现一个简单的示例来重现我们的体系结构。

提前感谢!

我有一个REST控制器@Path(“ / greet”)@RequestScoped公共类GreetController {@Inject private GreeterService greeterService; @GET @Path(“ {name}”)@Produces(TEXT_PLAIN)...

java-ee dependency-injection cdi
1个回答
0
投票

要注入合格的物品,请确保该物品和注入点上出现限定符:

© www.soinside.com 2019 - 2024. All rights reserved.