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

jon*_*789 5 java spring annotations dependency-injection service-locator

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

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

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

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

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

谢谢.

Sea*_*oyd 2

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

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

b) 使用一个主类来完成 Spring 所做的事情(查看 org.springframework.context.annotation.ComponentScanBeanDefinitionParser 的源代码以了解从哪里开始)。将主类连接到 Maven 或 ant 构建,使其在编译时自动执行。这里的问题是您必须处理已编译的类,而不是源代码,因此您的服务定位器类在编译时将不可用。