首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在enable=true组件中@Component的‘OSGi’属性是什么?

在enable=true组件中@Component的‘OSGi’属性是什么?
EN

Stack Overflow用户
提问于 2018-04-19 06:54:03
回答 2查看 1.8K关注 0票数 4

我在OSGi中使用了@Component的属性,通过docs无法理解该属性,也没有获得任何细节信息,即启用。

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

启用

代码语言:javascript
复制
enabled 
Default: true 
SCR Descriptor: component.enabled 
Metatype Descriptor: -- 

当包启动时是否启用了组件

即时

代码语言:javascript
复制
immediate 
Default: -- 
SCR Descriptor: component.immediate 
Metatype Descriptor: -- 

组件是否立即被激活

虽然我知道“激活组件”,但我不明白“启用组件”这个术语意味着什么?

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

提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-19 14:05:34

组件默认为enabled=true,这意味着一旦满足它们的依赖关系--例如所需的配置和/或强制服务引用--就可以激活它们。

即使满足所有依赖项,enabled=false组件也不能用于激活。它是完全禁用的,将不会启动。

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

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

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

票数 5
EN

Stack Overflow用户

发布于 2018-04-19 08:01:08

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

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

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

阅读博客的生命周期部分--让您对OSGi DS有一个清晰的理解。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49914540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档