【Java EE】--Contexts and Dependency Injection(上下文和依赖注入) 03

前端之家收集整理的这篇文章主要介绍了【Java EE】--Contexts and Dependency Injection(上下文和依赖注入) 03前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

猜你在找的设计模式相关文章