一、服务提供者:
1、发布服务类
public class Tiny implements CommandProvider{
public void onBind(IAbility ability,Map properties){
*** //这里为什么不是List<IAbility> abilityList,在下也不太懂
}
public void onUnbind(IAbility ability,Map properties){
*** // 做自己想做的事
}
}
2.发布服务配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd">
<bean id="tiny" class="com.ferry.hero.Tiny">
<property name="ability" ref="ability"/>
</bean>
<!-- abilitys不一定是tiny的属性字段,而是onBind方法里的形参,至于onBind方法里为啥不是list,我也不清楚,可能是cardinality的作用?或者是因为spring适配了 -->
<osgi:list id="abilitys" interface="com.ferry.ability.IAbility" cardinality="0..N">
<osgi:listener ref="tiny" bind-method="onBind" unbind-method="onUnbind"/>
</osgi:list>
<osgi:service ref="tiny" interface="org.eclipse.osgi.framework.console.CommandProvider">
</osgi:service>
</beans>
二:服务引用
1.配置文件
<osgi:reference id="tiny" interface="org.eclipse.osgi.framework.console.CommandProvider">
</osgi:reference>
2.代码直接引用
@Autowired
private CommandProvider tiny;
这样在实例化tiny的时候被osgi监听到,会调用tiny的onBind方法。销毁时,调用onUnbind方法。