我有一个包 com.org.pages
,里面有 40 多个类。
我想通过 Spring 将所有这些类初始化为 Beans。现在我不想去为那个包中的每个类添加 @Component
。
问题 1: 是否有任何其他方法可以实现此目的而不使用 @Component
注释所有这些类以将它们视为 beans?
问题 2:一旦我使用 @Component 注释对这些类进行注释,我是否需要将这些类的@Autowire
引用实际创建它们的实例?
最佳答案
您需要创建自己的 bean 定义,
做类似的事情
@Component
public class CustomBeanFactoryPostProcessor implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
Reflections reflections = new Reflections("my.package.prefix", new SubTypesScanner(false));
Set<Class<? extends Object>> allClasses = reflections.getSubTypesOf(Object.class);
for (Class clazz : allClasses) {
GenericBeanDefinition gbd = new GenericBeanDefinition();
gbd.setBeanClass(clazz);
gbd.setAttribute("attributeName", "attributeValue");
registry.registerBeanDefinition(clazz.getSimpleName() + "RegisteredBean", gbd);
}
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
// Custom post process the existing bean definitions
}
}
通过这种方式,您将在提供的包中将所有类注册为 beans
关于java - 将包内的所有类初始化为 Beans,而无需使用 @Component 注释声明它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51185614/