如何使用 Java 反射来创建 @Autowired class 的实例

How to use Java reflection to create an instance of an @Autowired class

我有一个 postgres 数据库,它存储(作为字符串)相关的 class 以根据来自用户的信息使用。

例如用户输入了 Name,数据库中存储了 NameFinder() 值,代码需要创建一个 NameFinder() 实例。

想知道有没有办法利用反射将这个class实例化为@Autowired组件,然后调用相关函数

我似乎找不到使用@Autowired classes 的指南,因此我们将不胜感激。

要使自动装配工作,您需要 class 将 @Autowired 用作 @Component(或 @Service 之类的子项 ...)。 https://www.baeldung.com/spring-autowire

为了Spring知道要注入什么,你需要在配置中定义一个@Bean https://www.baeldung.com/spring-bean

关于bean中的反射实例化:

@Bean
public Name getName(Database db) {
    String nameFqn = db.getConfigTable().getNameFQN();
    return (Name) Class.forName(nameFqn).getConstructor().newInstance();
}

请注意,这使用了 no-arg public 构造函数。 FQN 表示 fully-qualified 名称,即 com.some.pkg.NameFinder 假设:

package com.some.pkg;

class NameFinder implements Name {
    public NameFinder(){}
}

我觉得 Spring Bean 也应该可以直接从 FQN 配置而不使用反射,但我不知道如何配置。尝试阅读 BeanFactory 或类似的东西。通常反射是要避免的。