假设我声明了一个接口MyInterface,只有当它的实现是Spring组件时才有意义:
public interface MyInterface {
}
@Component
public class MyImpl1 implements MyInterface {
}
@Component
public class MyImpl2 implements MyInterface {
}
有没有其他方法可以做到这一点,而不需要用@Component
注解每一个实现类?我希望实现自动注册,如果他们实现了MyInterface。
2条答案
按热度按时间njthzxwz1#
是的,你可以。你应该为你的接口
MyInterface
编写Bean后处理器,在启动spring应用程序之前,它会查找所有的类并找到所有实现该接口的类,然后将所有的类注册到ApplicationContextnuypyhwy2#
自动注册特定接口的所有实现可以按如下方式完成。注意:对于大的类路径,对类路径(包括尚未加载的类)的完全扫描可能是耗时的。
创建一个
@Configuration
类,实现BeanDefinitionRegistryPostProcessor
和PriorityOrdered
,如下所示。这将扫描并创建bean,其名称与实现类的包和类名相同。通过使用实现类的包和类名作为限定符来自动连接创建的bean,如下所示:
下面是对org.reflections:reflections的依赖: