@Inject 一个会话bean中的接口

@Inject an interface in a session bean

我有一个无状态会话 bean,它确实从库中注入了一个接口。

@Stateless
public class MyService {

    @Inject
    IMyLib iMyLib;
}

public interface IMyLib {
...
}

public class MyLib implements IMyLib {
...
}

这接缝工作!但为什么?容器怎么知道要注入什么?

这是允许的好做法吗?

这是一个很好的做法:使用接口可以将您的代码与实现分离。它还允许可以用限定符注释的多个实现,因此代码的不同用途可以使用不同的实现。它还允许装饰器添加额外的功能。

CDI documentation: What gets injected