我有以下组件:
@Component(
label = "Service name",
description = "Service description",
metatype = true,
immediate = false)
@Properties({
@Property(
label = "My Label"
name = "property-name",
value = "my value",
propertyPrivate = true
)
})
@Service
public class SampleServiceImpl implements SampleService {
private final Logger log =
LoggerFactory.getLogger(this.getClass());
/**
* OSGi Properties *
*/
private static final String DEFAULT_SAMPLE = "hello!";
private String mySample = DEFAULT_SAMPLE;
@Property(label = "Prop name",
description = "Prop description",
value = DEFAULT_SAMPLE)
public static final String PROP_SAMPLE = "sample";
...
@Activate
protected void activate(final Map<String, String> config) {
mySample = PropertiesUtil.toString(config.get(PROP_SAMPLE), DEFAULT_SAMPLE);
}
@Deactivate
protected void deactivate(final Map<String, String> config) { }
}
在cq开始后注册了。这是预期的行为。
如何开始?我找不到这个界面。
答案 0 :(得分:3)
是的,这是非直接组件的预期行为。来自a blog post的Felix Meschberger在dev.day.com上,
OSGi声明性服务规范定义了三种类型 组件:
立即组件会立即创建 提供捆绑包已启动,可能会也可能不会提供服务
延迟组件提供服务,但仅在使用时创建 服务消费者。
工厂组件是按需创建的 调用的ComponentFactory.newInstance(Dictionary)方法 为组件注册的组件工厂服务。
因此,如果设置immediate = false
,您将拥有一个延迟组件,该组件在运行时按需激活 - 您无需自己显式启动组件。
您应该检查的主要事情是组件处于&#34;已启用状态&#34;或&#34;注册&#34; (正如你提到的那样)而不是&#34;不满意&#34; (它无法找到所需依赖项的引用。)
From the Felix documentation ...
<强> STATE_REGISTERED 强>
组件已成功激活,但在首次使用时是一个延迟或服务工厂组件待处理实例化(值为32)。
答案 1 :(得分:-2)
@Component( enabled= false,...)
然后转到system/console/components