我正在编写一个服务注册表类。此服务注册表将扫描包以查找带注释的类,然后填充一些内部映射。那么我需要的是能够使用某种方法(比方说)查询服务(通过字符串名称Object get(String name)
)。然后,此方法将在内部地图中搜索具有此类名称的服务并返回实例。
我现在正在做的是让这个 ServiceRegistryBean 实现ApplicationContextAware
,BeanDefinitionRegistryPostProcessor
并在构造上给出一个字符串(包名称)列表。
然后,一旦构建了 bean,注册表后处理器就会启动(见注释),并且注册表类将服务类作为新 bean(单例,延迟加载)添加到 spring bean 注册表中。然后,获取服务实例就像从上下文中请求一个 bean,返回单例实例一样简单。
我的问题是:春天有没有更好的方法来做到这一点?我调查过豆类工厂,但在我看来并不相同。在服务实例中支持自动装配和 DI 是必不可少的,这就是我希望 Spring 实例化它的原因。另外,我喜欢 Spring 照顾单身人士的想法。
注意:我发现,当我将 bean 创建内联时<constructor-arg>
(即 bean 未命名,只是作为其他 bean 的构造函数参数传递的实例 - 在我的情况下,我将注册表作为参数传递给其他构造函数),BeanDefinitionRegistryPostProcessor
接口方法(即public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)
)根本不被调用!我很确定,这是我不知道的 Spring 的一些行为,但我无法为后处理器找到合适的文档。
感谢您的任何提示或见解!