例如,在这个问题的最佳答案中:Java EE 6 @javax.annotation.ManagedBean 与 @javax.inject.Named 与 @javax.faces.ManagedBean https://stackoverflow.com/questions/11986847/java-ee-6-javax-annotation-managedbean-vs-javax-inject-named-vs-javax-faces我读到:
要部署 CDI bean,您必须将名为 beans.xml 的文件放置在
类路径上的 META-INF 文件夹。一旦你这样做了,那么每颗豆子都会
该包成为 CDI bean。
而且还据说:
如果您想从 JSF 页面使用 CDI bean,您可以给它一个
使用 javax.inject.Named 注释命名。
我有一个示例代码,如下所示:
@ManagedBean
@ViewScoped
public class SignUpPage {
private User user;
@PostConstruct
public void init() {
user = new User();
}
@Inject
private UserDao userDao;
// rest of the class
据我了解,我的bean仍然是JSF托管Bean,它不是CDI bean(或者是?)。顺便说一下,我的 WEB-INF 文件夹中有一个 beans.xml。
@Inject 在这里工作得很好。另外,我可以使用 EL 访问该 bean(这让我认为它仍然是一个 JSF 托管 Bean)
UserDao 类看起来像这样:
@Stateless
public class UserDao {
EntityManager em;
@PostConstruct
public void initialize(){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Persistence");
em = emf.createEntityManager();
}
所以,据我所知,这是一个 EJB..
那么这个例子中我有 CDI bean 吗? @Inject 在这里如何工作?
希望我的问题很清楚,问候!
By CDI 规格 http://docs.jboss.org/cdi/spec/1.0/html/architecture.html#d0e238,每个 JavaBean 都是一个Managed Bean
(不要将其与 JSF 混淆@ManagedBean
,这是一个不同的)在项目中beans.xml
存在。所以每个类也都有资格进行依赖注入。请注意,此类的默认范围是Dependent
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)