Java 如何使用类名命名OSGi组件?

Java 如何使用类名命名OSGi组件?,java,osgi,Java,Osgi,我的项目使用一种约定,即使用class.getName()作为OSGi容器的名称。大多数现有组件都有一个公共静态最终字符串常量,该常量包含如下名称: package mypackage; @Component(name = MyClass.COMPONENT_NAME) public class MyClass { public static final String COMPONENT_NAME = "mypackage" + ".MyClass"; ... } 在项目中创建

我的项目使用一种约定,即使用
class.getName()
作为OSGi容器的名称。大多数现有组件都有一个
公共静态最终字符串
常量,该常量包含如下名称:

package mypackage;
@Component(name = MyClass.COMPONENT_NAME)
public class MyClass {
    public static final String COMPONENT_NAME = "mypackage" + ".MyClass";
    ...
}
在项目中创建第一个组件时,我尝试了以下方法:

package mypackage;
@Component(name = MyClass.COMPONENT_NAME)
public class MyClass {
    public static final String COMPONENT_NAME = MyClass.class.getName();
    ...
}
但是,编译器在注释中抱怨
名称
应该是常量


为什么这不起作用呢?

在您的例子中是一个方法调用,它将在初始化类时(在运行时)执行。 价值

MyClass.class.getName()


编译时不知道方法调用。这就是抱怨的原因

对。组件名称不是注释所必需的编译时常量。它只是一个运行时常量。此外,对于OSGi DS注释,如果未指定名称,则组件的名称是要注释的类的完全限定类型名称。不管怎样,这似乎是你想要的。