当前位置: 首页 > 知识库问答 >
问题:

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

云育
2023-03-14

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

我从Felix留档得到的关于scr注释的是:

启用

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

捆绑启动时组件是否启用

立即的

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

组件是否立即激活

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

任何有用例或例子帮助的答案,在什么时候使用什么,都会更受欢迎。

先谢谢你。

共有2个答案

岳奇逸
2023-03-14

启用是组件生命周期中的状态之一。这是组件的初始和默认状态。其中asimmediate=true是您对已启用组件执行的操作,以立即将其更改为活动状态,而不是延迟激活(immediate=false)。

现在,在启用状态和活动状态之间,服务组件将经历更多的状态,在这些状态中,它满足所有依赖项,绑定所有引用(@references),创建组件实例、组件上下文对象等,所有这些都需要时间和内存。

关于使用启用的和立即使用的用例,您可以使用这些描述符来优化组件的初始内存占用和加载时间。在某些情况下,您可能希望仅在特定条件下以编程方式启用或激活已禁用的组件。在这种情况下,组件最初被禁用,它甚至不尝试移动到下一个状态,从而优化了包(该组件所属的包)的时间和内存占用。

通读本博客的生命周期部分——让你对OSGi有一个清晰的理解。

陶成济
2023-03-14

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

启用了的组件=false即使满足其所有依赖项,也无法激活。它已完全禁用,不会启动。

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

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

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

 类似资料:
  • 问题内容: 在Spring Boot文档中看到了有关JPA配置的属性。 如果根本没有提供此属性的默认值? 这到底是做什么的?我没有找到任何很好的解释。 它使你代替使用吗?如果是,我如何告诉它允许我使用它? 谢谢! 问题答案: The OSIV Anti-Pattern OSIV(视图中的打开会话)没有让业务层决定如何最好地获取视图层所需的所有关联,而是强制持久性上下文保持打开状态,以便视图层可以触

  • 我在用于JPA配置的Spring Boot文档中看到了属性。 如果根本不提供此属性,则是否为默认值?; 这到底是做什么的?我没有找到任何好的解释; 它是否使您使用而不是?如果是,我如何告诉它允许我使用? 谢谢!

  • 问题内容: 我读到要获取数组的长度,我使用的属性,例如。什么是属性?这是一堂课吗? 问题答案: 属性是字段的另一个术语。它通常是一个公共常量或可以直接访问的公共变量。在这种特殊情况下,Java中的数组实际上是一个对象,并且您正在访问表示数组长度的公共常量值。

  • 组件不直接在模板范围中访问属性。 因此,只需在组件减速时声明属性(例如:{{component-name title = title}})。 外部模板范围中的title属性在组件的模板中可用。 语法 (Syntax) {{post-action title=title}} 在上面的代码中,'post-action'组件具有'title'属性,并使用与属性名称('title')相同的名称进行初始化

  • 组件是 Yii 应用的主要基石。是 yii\base\Component 类或其子类的实例。 三个用以区分它和其它类的主要功能有: 属性(Property) 事件(Event) 行为(Behavior) 或单独使用,或彼此配合,这些功能的应用让 Yii 的类变得更加灵活和易用。 以小部件 yii\jui\DatePicker 来举例, 这是个方便你在 视图 中生成一个交互式日期选择器的 UI 组件

  • 在entity-component-system pattern里,组件是一个可重用和模块化的数据块,我们将其插入到一个实体中,以添加外观、行为和/或功能。 在A-Frame中,组件修改场景中的三维对象实体。我们将组件组合在一起构建复杂对象。组件让我们把three.js和JS代码封装进模块里,以便于在HTML以声明的方式进行使用。 作为一个抽象的类比,如果我们把智能手机定义为一个实体,我们就可以使