7.2. 使用上下文和依赖注入来开发应用程序
上下文和依赖注入(CDI)在开发应用程序、重用代码、在部署或运行时修改代码以及单元测试方面为您提供巨大的灵活性。
我们ld 为应用程序开发提供了一个特殊模式。启用后,可以使用某些内置工具,协助上下文和依赖注入应用程序的开发。
开发模式不应在生产环境中使用,因为它可能会对应用的性能造成负面影响。在部署到生产环境之前,务必禁用开发模式。
为 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 定义注解。