Java - 使用注释自动实现服务定位器模式

时间:2011-06-08 16:11:34

标签: java spring dependency-injection annotations service-locator

Spring几乎提供了我想要的东西。在Spring中,您可以使用@Component简单地注释类,然后使用“context:component-scan”让Spring自动搜索组件。然后,您可以创建应用程序上下文并调用getBean(String,Class)以获取任何接口或类的实现。

例如,如果我有一个接口“Mp3Service”并且我想注册一个名为“InternetMp3Service”的新实现,我所要做的就是将@Component注释添加到类定义中。

对我来说唯一的问题是我想在applet中使用所有这些,因此我获得了权限“accessDeclaredMembers”的java.lang.RuntimePermission异常。我不想签署applet,我不想为bean创建一个显式配置。

我正在寻找的是一个框架/库,它将在编译/构建时通过注释并创建一个可以在运行时读取的配置。

例如,如果此处没有任何内容我决定值得麻烦,我可以编写自己的程序来抛出所有类并查找某个注释,然后创建一个spring xml配置文件。但是,我认为现在有人可能已经有了。

感谢。

1 个答案:

答案 0 :(得分:2)

这个用例实际上是有道理的,但我确定没有人实现它。 我看到了两种方法:

a)使用Pluggable annotation Processing API。这里的问题是Spring在扫描注释时会执行非常高级的逻辑,您可能不得不为注释处理器重新实现它。

b)使用一个执行Spring操作的Main类(查看org.springframework.context.annotation.ComponentScanBeanDefinitionParser的源代码,了解从哪里开始)。将主类连接到maven或ant构建,以便在编译时自动执行。这里的问题是你必须处理已编译的类,而不是源代码,因此你的Service Locator类在编译时将不可用。