OSGi组件中@Component的'enable = true'属性是什么?

Man*_*sha 4 components osgi aem

我遇到了OSGi中@Component的一个属性,该属性我无法通过docs理解,也没有得到任何详细信息,即已启用。

我从Felix文档中获得关于scr注释的内容是:

已启用

enabled 
Default: true 
SCR Descriptor: component.enabled 
Metatype Descriptor: -- 
Run Code Online (Sandbox Code Playgroud)

捆绑包启动时是否启用组件

即时

immediate 
Default: -- 
SCR Descriptor: component.immediate 
Metatype Descriptor: -- 
Run Code Online (Sandbox Code Playgroud)

是否立即激活组件

尽管我知道“激活组件”,但是我不理解“启用组件”一词的含义是什么?

在用例或示例的帮助下的任何答案,以及何时使用的内容,都将受到赞赏。

先感谢您。

Nei*_*ett 5

enabled=true默认情况下,组件是指,一旦满足它们的依赖关系(例如,所需的配置和/或强制性服务引用),就可以激活它们。

enabled=false即使满足其所有依赖关系的组件也将无法激活。它已完全禁用,将无法启动。

那么...这有什么用?好吧,可以通过同一捆绑包中的另一个组件以编程方式启用禁用的组件。

主要用例是共享初始化。假设您有一个包含几个组件的捆绑软件,所有这些组件都需要等待某些初始化步骤发生,例如设置一堆文件。您可以制作除一个以外的 所有组件enabled=false。单个启用的组件在其激活方法中进行初始化,然后调用ComponentContext.enableComponent(null)以启用捆绑中的所有其他组件。

immediate是一个完全独立且正交的生命周期概念。提供服务的组件默认情况下是“延迟的”,这意味着仅当其他捆绑软件实际使用该服务时才加载和激活该组件。这是一个非常有用的延迟加载优化。但是,有时即使没有人使用它的服务,您也希望组件尽快启动。在那种情况下,您设置immediate=true