【Java EE】--Contexts and Dependency Injection(上下文和依赖
bean作为可注入对象注入的概念已经成为Java技术的一部分。 由于引入了Java EE 5平台,注释使得可以将资源和其他类型的对象注入到容器管理的对象中。 CDI使得可以注入更多种类的对象并将其注入到不是容器管理的对象中。 可以注入以下几种对象:
例如,假设您使用返回字符串的方法创建一个简单的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;
...
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |