我在写一个服务注册表类。此服务注册表将扫描注释类的包,然后填充一些内部映射。然后,我需要的是能够使用某种方法(例如Object get(String name)
)查询服务(按字符串名称)。然后该方法将搜索内部映射以获取具有此名称的服务并返回实例。通过Spring实例化任意类
我现在正在做的是让这个ServiceRegistryBean实现ApplicationContextAware
和BeanDefinitionRegistryPostProcessor
以及在构造上给出的字符串列表(包名)。
然后,只要构建bean,注册表后处理器就会启动(参见注释),注册表类将服务类作为新bean(单例,延迟加载)添加到Spring bean注册表中。然后,获取服务实例就像从上下文请求一个bean一样简单,返回单例实例。
我的问题是:春天有没有更好的方法来做到这一点?我已经研究过豆制品工厂,但它在我看来并不相同。在服务实例中支持自动布线和DI是必不可少的,这就是为什么我希望Spring实例化它。另外,我喜欢春天照顾单身人士的想法。
注意:我发现当我在<constructor-arg>
中内联bean的创建时(也就是说,bean没有被命名并且只是作为其他bean的构造器参数传递的实例 - 在我的情况下,注册表作为其他构造函数的参数),BeanDefinitionRegistryPostProcessor
接口方法(即public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)
)根本不会被调用!我很肯定,这是Spring的一些我不知道的行为,但我无法找到适合后处理器的文档。
谢谢你的任何提示或见解!
感谢您的回答,但我担心,我有理由拥有实际的注册表类,而不是使用Spring发现服务(其中之一是,该库应该支持非Spring部署,并且注释本身有一些其他的元数据关联,这需要考虑) – 2013-05-10 18:03:08
好吧,我忘了笔记。 – 2013-05-10 19:01:34