簡體   English   中英

如何在運行時使用方法自動連接類

[英]How to Autowire a class at runtime in a method

是否可以自動連接動態類中的字段? 我從數據庫中獲取一個班級名稱,我想自動連接該班級

簡短答案

那不可能 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);
     }
}

不確定這是一個好主意,但是您可以注入這里提到的類: 將bean注入Spring托管上下文之外的類中

您可以嘗試以下方法:

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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM