Felix iPOJO中@ServiceController和@Controller的区别

@ServiceController和@Controller从字面上看起来很像,都是用在类的boolean类型的field上,但是其作用完全不同。@ServiceController是OSGI容器的角度的,而@Controller是iPOJO容器角度的,这两个annotation给了iPOJO中的instance一个自己改变自己状态的能力。

在机制上

@ServiceController

@ServiceController当这个field被设置为false的时候,这个service会从服务注册中心注销(unregister);当这个field被设置为true的时候,这个service会被重新注册到服务注册中心。其实ipojo会在运行时监控这个field,以控制组件在OSGI容器中的生命周期

@Controller

@Controller也可以控制组件的生命周期,但是他是控制组件实例是否valid,这个field为false时,组件实例就变成invalid,如果是true,就是valid的。同理iPOJO会在运行时监控这个field的值的改变,其值一旦改变,instance的状态也就改变了,iPOJO会自动回调这个instance对应的component中配置的回调函数。

 

@ServiceController(value=false) 相当于设置了默认值
@ServiceController(value=false, specification=FooService.class) 对某个接口类进行默认值设定

发表评论

电子邮件地址不会被公开。

54 − = fifty two