bean作为可注入对象
注入的概念已经成为Java技术的一部分。 由于引入了Java EE 5平台,注释使得可以将资源和其他类型的对象注入到容器管理的对象中。 CDI使得可以注入更多种类的对象并将其注入到不是容器管理的对象中。
可以注入以下几种对象:
- (几乎)任何Java类
- 会话bean
- Java EE资源:数据源,Java消息服务主题,队列,连接工厂等
- 持久性上下文(Java Persistence API EntityManager对象)
- 生产者领域
- 由生产者方法返回的对象
- Web服务引用
- 远程企业bean引用
例如,假设您使用返回字符串的方法创建一个简单的Java类:
package greetings;
public class Greeting {
public String greet(String name) {
return "Hello," + name + ".";
}
}
这个类变成一个bean,然后你可以注入另一个类。 这种bean没有暴露在这种形式的EL。Giving Bean EL Names解释了如何使一个bean可以访问EL。
使用限定词(Qualifiers)
您可以使用限定符来提供特定bean类型的各种实现。 限定符是您应用于bean的注释。 限定符类型是定义为@Target({METHOD,FIELD,PARAMETER,TYPE})和@Retention(RUNTIME)的Java注释。
例如,您可以声明一个@Informal限定符类型并将其应用于扩展了Greeting类的另一个类。 要声明此限定符类型,您将使用以下代码:
package greetings;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;
import javax.inject.Qualifier;
@Qualifier
@Retention(RUNTIME)
@Target({TYPE,METHOD,FIELD,PARAMETER})
public @interface Informal {}
然后,您可以定义扩展Greeting类并使用此限定符的bean类:
package greetings;
@Informal
public class InformalGreeting extends Greeting {
public String greet(String name) {
return "Hi," + name + "!";
}
}
现在可以在应用程序中使用该bean的两个实现。
如果您定义一个没有限定符的bean,那么该bean自动具有限定符@Default。 未注释的Greeting类可以声明如下:
package greetings;
import javax.enterprise.inject.Default;
@Default
public class Greeting {
public String greet(String name) {
return "Hello," + name + ".";
}
}
注入bean
为了使用您创建的bean,您将它们注入另一个可以由应用程序(如JavaServer Faces应用程序)使用的另一个bean。 例如,您可以创建一个名为Printer的bean,您可以在其中注入一个Greeting beans:
import javax.inject.Inject;
public class Printer {
@Inject Greeting greeting;
...
}
该代码将@Default Greeting实现注入到bean中。 以下代码注入@Informal实现:
import javax.inject.Inject;
public class Printer {
@Inject @Informal Greeting greeting;
...
}
原文链接:https://www.f2er.com/javaschema/283105.html