私の要件: プロジェクトの永続性を処理するサービスがあります。このサービスをPersistenceProviderサービスと呼び、「my.persistenceservice」バンドルに存在すると仮定します。
これで、MyPersistenseConsumerという名前のクラスの1つのbind()unbind()メソッドを使用してPersistenceProviderサービスを参照する「my.persitenceconsumer」バンドルという名前の別のバンドルができました。したがって、「my.persistenceconsumer」バンドルが開始すると、bind()メソッドを使用してPersistenceProviderサービスの参照を取得し、MyPersistenceConsumerはPersistenceProviderサービスを使用できます。
ただし、「my.persitenceconsumer」バンドルのさまざまなクラスのこのPersistenceProviderサービスも使用する必要があります。
私の質問は次のとおりです。 異なるクラス(同じバンドル内)内でそのような共有サービスを使用するための最良の方法は何ですか?
解決策の1つ: 静的getInstance()メソッドを持つ「my.persitenceconsumer」バンドルにActivatorクラスを追加できます。これはMyPersistenceConsumer.bind()によって呼び出すことができ、ActivatorとともにPersistenceProviderを格納します。「my.persitenceconsumer」バンドル内のすべてのクラスは、Activatorクラスを使用してPersistenceProviderを使用できます。
コードは次のとおりです。
public class MyPersistenceConsumer {
public void bindPersistenceProvider(PersistenceProvider ppRef) {
MyPersistenceConsumerActivator.getInstance().bindPersistenceProvider(ppRef);
}
}
public class MyPersistenceConsumerActivator {
static MyPersistenceConsumerActivator instance;
PersistenceProvider ppRef;
public static getInstance() {
return instance;
}
public void bindPersistenceProvider(PersistenceProvider ppRef) {
this.ppRef = ppRef;
}
public PersistenceProvider getPersistenceProvider() {
return ppRef;
}
public void start(BundleContext context) throws Exception {
instance = this;
}
}
public class MyClass1 {
public void usePersistenceProvider(){
PersistenceProvider pp Ref =
MyPersistenceConsumerActivator.getInstance().getPersistenceProvider();
}
}
public class MyClass2 {
public void usePersistenceProvider(){
PersistenceProvider pp Ref =
MyPersistenceConsumerActivator.getInstance().getPersistenceProvider();
}
}
最後に: 上記は良い方法ですか..またはより良い方法はありますか?