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

标签 components osgi aem

我在 OSGi 中遇到了 @Component 的一个属性,我无法通过文档了解它,也没有获得任何详细信息,即启用。

我从 Felix documentation about scr annotation 得到的是:

启用

enabled 
Default: true 
SCR Descriptor: component.enabled 
Metatype Descriptor: -- 

Whether the component is enabled when the bundle starts



立即
immediate 
Default: -- 
SCR Descriptor: component.immediate 
Metatype Descriptor: -- 

Whether the component is immediately activated



虽然我知道“激活组件”,但我不明白“启用组件”是什么意思?

任何在用例或示例的帮助下的答案,何时使用什么,都更受欢迎。

先感谢您。

最佳答案

组件是 enabled=true默认情况下,这意味着它们将在它们的依赖项一出现就可用于激活——例如所需的配置和/或强制性服务引用 - 已得到满足。

一个组件是 enabled=false即使满足所有依赖项,也将无法激活。它被完全禁用并且不会启动。

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

主要用例是 共享初始化 .假设您有一个包含多个组件的包,这些组件都需要等待一些初始化步骤发生,比如设置一堆文件。您可以制作所有组件 除了一个 enabled=false .单个启用的组件在其激活方法中进行初始化,然后调用 ComponentContext.enableComponent(null)启用捆绑中的所有其他组件。
immediate是一个完全独立和正交的生命周期概念。默认情况下,提供服务的组件是“延迟的”,这意味着该组件仅在其他一些包实际使用该服务时才加载和激活。这是一个非常有用的延迟加载优化。然而,有时您希望您的组件尽快启动,即使没有人使用它的服务。在这些情况下,您设置 immediate=true .

关于components - OSGi 组件中@Component 的 'enable=true' 属性是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49914540/

相关文章:

javascript - 如果Child组件动态组件,如何将数据从Child传递到Parent

javascript - 我如何有条件地加载我的 React 组件?

javascript - 指向外部 URL 的 Angular 2 链接被视为路由的相对路径

gradle - 在OSGi胖子装束中查找重复的JAR

curl - 如何将 "Access-Control-Allow-Origin: *" header 放入吊带节点中

java - CQ5 : 403 Forbidden occurs when call a Post servlet

apache-flex - 是否有在 SWC 组件中嵌入元数据(例如版本、许可证)的标准化方法?

oracle - 如何在 osgi Liferay DXP 中添加第三方依赖

osgi - 如何从非 OSGi 应用程序调用 OSGi 应用程序,反之亦然

aem - 根据 Parsys 在编辑栏中隐藏删除按钮