是否可以自动连接动态类中的字段? 我从数据库中获取一个类名,我想自动连接该类
答案 0 :(得分:1)
简短回答
那是不可能的。 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);
}
}
答案 1 :(得分:0)
不确定这是一个好主意,但是您可以注入一个像这里提到的类: Injecting beans into a class outside the Spring managed context
答案 2 :(得分:0)
您可以尝试以下方法:
import javax.annotation.PostConstruct;
@Component
public class ApplicationContextAccessor {
private static ApplicationContextAccessor instance;
@Autowired
private ApplicationContext applicationContext;
public static T getBean(Class clazz) {
return instance.applicationContext.getBean(clazz);
}
@PostConstruct
private void registerInstance() {
instance = this;
}
}
阅读这篇文章:https://www.helicaltech.com/uses-of-springs-applicationcontext-while-using-reflection/