Допустит, у меня есть расслоение, и он имеет HelloWorld интерфейса и функцию HelloWorld()как я могу использовать OSGi службу в другом пакете
Теперь, в другом расслоении B, я реализую следующие
@Service(HelloWorld.class)
@Component(immediate = true)
public class Test1Impl implements HelloWorld
{
public String helloWorld()
{
return "I'm from Bundle B";
}
}
Я другой пучок C, я делаю
@Service(HelloWorld.class)
@Component(immediate = true)
public class Test2Impl implements HelloWorld
{
public String helloWorld()
{
return "I'm from Bundle C";
}
}
Теперь, если мне нужно, чтобы получить реализацию Bundle C только тогда, что я должен делать? Например, в общем, я делаю, как показано ниже, но в этом случае он не работает.
Helloworld obj = sling.getService(HelloWorld.class);
obj.helloWorld();
Что означает «это не работает»? Это не дает никакой информации. Укажите, что вы ожидали, и что на самом деле произошло. –
@NeilBartlett, я имею в виду, что я не получаю желаемого результата «Я из Bundle C», вместо этого получаю «Я из Bundle B», я предполагаю, что это происходит, потому что Bundle B был разрешен первым. –
Нет, это не имеет никакого отношения к тому, кто решает сначала. Вы можете получить любую из реализаций, потому что они являются одинаково действительными совпадениями для запрашиваемого интерфейса службы. –