7.2. 使用 Jakarta 上下文和依赖注入来开发应用程序
Jakarta Contexts 和 Dependency Injection 在开发应用程序、重用代码、在部署或运行时修改代码以及单元测试方面为您提供巨大的灵活性。
我们ld 为应用程序开发提供了一个特殊模式。启用后,可以使用某些内置工具,协助 Jakarta Contexts 和 Dependency Injection 应用程序的开发。
开发模式不应在生产环境中使用,因为它可能会对应用的性能造成负面影响。在部署到生产环境之前,务必禁用开发模式。
为 Web 应用程序启用开发模式:
对于 web 应用程序,将 servlet 初始化参数 org.jboss.weld.development 设置为 true :
<web-app>
<context-param>
<param-name>org.jboss.weld.development</param-name>
<param-value>true</param-value>
</context-param>
</web-app>使用管理 CLI 为 JBoss EAP 启用开发模式:
通过将 development-mode 属性设置为 true,可以为部署的所有应用程序全局启用 Weld 开发模式:
/subsystem=weld:write-attribute(name=development-mode,value=true)
7.2.1. 默认 Bean 发现模式
Bean 存档的默认 bean 发现模式被 标注。此类 Bean 存档 被认为是隐式 Bean 存档。
如果 注解 了 bean 发现模式,则:
-
不会发现没有
bean 定义注解且不是 Bean 类会话 Bean 类的 Bean 类。 - 不在会话 Bean 上以及 bean 类没有 Bean 定义注释的制作者方法不会发现。
- 不在会话 Bean 上以及 bean 类没有 Bean 定义注解的制作者字段不会被发现。
- 不在会话 Bean 上且 bean 类没有 Bean 定义注解的推理器方法不会被发现。
- 不在会话 Bean 上以及 bean 类没有 Bean 定义注解的观察方法不会发现。
只有将发现模式设置为 all 时,Contexts 和 Dependency Injection 部分中的所有示例才有效。
Bean 定义注解
Bean 类可以具有一个 定义注解的 Bean,以便能够将其放置在应用程序中的任何位置,如 bean 存档中所定义。Bean 类中带有 Bean 定义注解,这被认为是隐式 Bean。
Bean 定义注解集合包含:
-
@ApplicationScoped、@SessionScoped、@ConversationScoped和@RequestScoped注释. - 所有其他普通范围类型.
-
@interceptor和@Decorator注释. -
所有 stereotype 注释,即标有
@Stereotype 的注释。 -
@Dependent范围注释.
如果在 Bean 类上声明其中一个注释,则 bean 类被认为具有 Bean 定义注释。
示例:Bean 定义注解
@Dependent
public class BookShop
extends Business
implements Shop<Book> {
...
}
为确保与其他 JSR-330 实施以及 Jakarta 上下文和依赖注入规范兼容,除 @Dependent 外,所有伪作用注释都不是定义注释。但是,stereotype 注释(包括伪范围注释)是 Bean 定义注解。