首页 > 解决方案 > 如何在运行时在方法中自动装配类

问题描述

是否可以在动态类中自动装配字段?我从数据库中得到一个类名,我想自动装配这个类

标签: javaspring

解决方案


简答

那是不可能的。Spring 需要知道有哪些 Bean 用于注入它们。

长答案

您可以将@Autowire每个可能的 bean 放入一个类中,然后将它们缓存在一个 Map 中,其中 Class 表示键,Object 表示值。请参见下面的简化示例:

public class MyClass{
     private final Map<Class<?>, Object> cache = new HashMap<>();

     @Autowired
     public MyClass(Service1 s1, Service2 s2){
         // registering the beans
         cache.put(Service1.class, s1);
         cache.put(Service2.class, s2);
     }

     public <T> T getService(String className) throws ClassNotFoundException{
         // getting the bean
         Class<?> clazz = Class.forName(className);
         return (T) cache.get(clazz);
     }
}

推荐阅读