这是上周解决的DI / CDI基础知识的延续-在本文中,我将讨论基础注入,限定词和范围。
在上一个主题中,我们提供了有关DI / CDI概念的大量信息,我们还讨论了如何使用注释加载这些bean或类-这构成了对象的组成并创建了关于如何进行采样的示例。以编程方式声明它们。 在本文中,我们将在注入部分进行更多讨论,即如何获取特定资源并将其注入另一资源以供使用。
那么如何首先注入一个豆子呢?
基本注射
您如何注入豆?
- 使用@Inject <Java-Type> <variable>进行字段注入
- <Java-Type>可以是Java类或Java接口
public class MyGreeter {// Inject Greeting object for field injection@Inject Greeting greeting;public sayGreeting(String name){// You can then used the injected Greeting objectSystem.out.println(greeting.greet(name)); }
}
哪里可以注入豆子?
可以在“注入点”注入豆
- 领域
- 方法参数
方法可以是:
- 构造函数(对创建的不可变对象有用)>初始化程序
- 设置方法
- 制片人
- 观察者
public class MyGreeter {private Greeting greeting;// Use constructor method injection@Injectpublic MyGreeter(Greeting greeting) {this.greeting = greeting; }public sayGreeting(String name){System.out.println(greeting.greet(name)); }
}
资格赛
如果存在多种实现类型(接口和子类),则限定符用于分配特定的bean。 假设您有两个特定接口的候选对象(实现类):
- 界面是人
- 第1类是普通人
- 第2类是非正规人士
我们可以通过引入/创建自己的Qualifier批注来使用Qualifiers明确指定类的实现:
RegularPerson Qualifier批注:
NonRegularPerson限定符注释:
现在,我们需要创建一个实现类并将其标记到我们创建的Qualifier中。
RegularPersonImpl:
NonRegularPersonImpl:
注意:可以有尽可能多的限定符–请记住,限定符是用于将逻辑对象实现与其公共接口分开的。
现在已经设置了实现,我们现在可以注入类并使用其限定符。
在此示例中,您可以清楚地看到用法,通过引入Qualifier,开发人员可以通过注释明确指定实现类型。
在此处下载示例。
您可以利用预选赛做其他事情吗?
我将不进一步讨论限定词的其他用途,相反,我将让您检查以下示例,以尝试并探索:
- 多个预选赛
- 带有属性的限定词
- 具有多个属性的限定符
范围
为什么首先需要在对象上作用域? –对于Web应用程序,我们需要我们的bean在用户与应用程序交互的持续时间内保持状态,例如,跨多个对服务器的请求。
开发人员可以分配给对象的作用域有5种类型:
- @Dependent(默认)
- 默认范围(如果未指定);
- @RequestScoped
- 在单个HTTP请求中用户与Web应用程序交互期间,将维护对象的状态。
- @SessionScoped
- 在多个HTTP请求之间用户与Web应用程序进行交互期间,将维护对象的状态。
- @ApplicationScoped
- 所有用户与Web应用程序交互中的共享状态。
- @ConversationScoped
- 会话上下文由应用程序明确划分
我不会在这里详细介绍,但是我将为您提供可以运行的实际示例。 在此处下载项目。
- 依附
- 请求
- 届会
- 应用
- 会话
下一站:DI / CDI –前进
使用此新功能,您可以清楚地观察和想象通过简化许多设置Web应用程序的过程来提高开发人员的生产率–可以创建限定符以明确区分具有共同目标(按接口)的逻辑/业务Bean,进行范围界定让开发人员控制流程并管理对象的状态–通过UI直接通过EL调用bean的简化使其更简单。
请检查示例并自行尝试,最好检查一个实际示例,而不是只阅读详细信息和概念。 请享用!
翻译自: https://www.javacodegeeks.com/2013/08/basic-injection-qualifiers-scope.html