有发展的小企业网站建设,事业单位网站建设算固定资产吗,网站内容侵权 怎么做,wordpress 导入幻灯片java ee cdi在本教程中#xff0c;我们将向您展示如何在CDI管理的Bean中实现依赖注入。 特别是#xff0c;我们将利用CDI API提供的Inject批注将CDI bean注入另一个bean。 通过这种方式#xff0c;可以在应用程序#xff08;例如JavaServer Faces应用程序#xff09;中使用… java ee cdi 在本教程中我们将向您展示如何在CDI管理的Bean中实现依赖注入。 特别是我们将利用CDI API提供的Inject批注将CDI bean注入另一个bean。 通过这种方式可以在应用程序例如JavaServer Faces应用程序中使用bean。 CDI提供了几种将Bean注入应用程序的方法。 我们可以使用字段依赖注入构造函数依赖注入或通过setter方法的依赖注入来注入CDI bean。 我们也可以注入生产者方法的参数但这超出了本教程的范围。 让我们检查一下CDI提供的所有注入方式 1.字段依赖注入 注入CDI bean的最简单方法是在要注入的属性中添加Inject批注。 让我们看下面的例子。 GreetingBean有一个Inject注释字段它是helloBean 。 这样另一个bean HelloBean被注入GreetingBean 。 package com.javacodegeeks.snippets.enterprise.cdibeans;import javax.inject.Inject;public class GreetingBean {Inject private HelloBean helloBean;}2.构造函数依赖注入 初始化CDI bean时容器将使用其默认构造函数。 当有另一个带有Inject注释的构造函数时容器将自动使用该构造函数这样构造函数中传递的参数将被注入Bean中。 这里要注意的是我们只能有一个构造函数注入点。 如果我们创建另一个Inject注释的构造函数则容器的行为是不可预测的。 在GreetingBean下面的代码段中有一个构造函数该构造函数带有Inject注释和一个参数即另一个bean HelloBean 。 以这种方式实现注射。 package com.javacodegeeks.snippets.enterprise.cdibeans;import javax.inject.Inject;public class GreetingBean {private final HelloBean helloBean;Injectpublic GreetingBean(HelloBean helloBean){this.helloBean helloBean;}}3.通过setter方法进行依赖注入 在下面的示例中使用Inject注释对setHelloBean(HelloBean helloBean)方法进行注释。 因此当GreetingBean由容器初始化时将调用该方法因为该方法带有Inject注释并且将注入HelloBean 。 package com.javacodegeeks.snippets.enterprise.cdibeans;import javax.inject.Inject;public class GreetingBean {private HelloBean helloBean;Injectpublic void setHelloBean(HelloBean helloBean) {this.helloBean helloBean;}
}4.使用Any限定词 当我们有一个接口的多个实现并且想要将它们全部注入另一个bean中时可以使用Any限定符。 使用此注释容器将注入指定接口的所有实现。 它与CDI API提供的javax.enterprise.inject.Instance接口一起使用如下面的代码片段所示 package com.javacodegeeks.snippets.enterprise.cdibeans;import javax.enterprise.inject.Any;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;public class GreetingBean {Injectpublic void getAllBeanImplementations(Any InstanceHelloBean beans) {for (HelloBean helloBean : beans) {System.out.println(helloBean.getClass().getCanonicalName());}}
} 在这里我们必须注意如果有多个满足注入点的依赖关系并且我们将不使用Any限定符而是尝试注入一个那么容器将失败。 5.使用代理进行注射 为了将托管bean注入另一个bean中除Dependent注释的bean之外CDI容器不会传递对注入的bean本身的引用而是传递给代理的引用。 代理透明地处理对注入的Bean的所有调用。 例如当我们将SessionScoped bean注入ApplicationScoped bean并且许多客户端访问ApplicationScopedBean 代理将用于处理对注入的bean的调用。 每个代理都可以将调用重定向到正确的bean。 最后请注意通过扩展Bean类并覆盖所有非自变方法来创建CDI代理。 原始类型不能被注入。 Bean类必须具有非私有的默认构造函数并且不能为final也不能具有final方法。 这是使用Inject批注的CDI托管Bean中的依赖注入的教程。 翻译自: https://www.javacodegeeks.com/2013/05/java-ee-cdi-dependency-injection-inject-tutorial.htmljava ee cdi