java - 将包内的所有类初始化为 Beans,而无需使用 @Component 注释声明它们

标签 java spring javabeans

我有一个包 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/

相关文章:

java - 如何获取默认的 apache camel 上下文 id 或创建新的

java - Resteasy(多部分/表单数据): how to read multi value field values to List?

java - 在selenium java中动态将数据写入excel

java - Swing 线程回调

mysql - 错误 : Cannot use identity column key generation with <union-subclass> ( TABLE_PER_CLASS )

java - 子类上的@PreAuthorize

java - 检索 Java Bean 中的 JVM 参数,而不循环所有值

java - 读取paradox DBF文件并导入H2数据库

java - FindOne 无法使用 Spring 工作

Java 接口(interface)使用指南——接口(interface)中的 getter 和 setter 是否不好?