@Autowired
private ApplicationContext applicationContext;
// 可以為接口或者業務方法被調用
public void reloadInstance(){
//擷取上下文
DefaultListableBeanFactory defaultListableBeanFactory =
(DefaultListableBeanFactory)applicationContext.getAutowireCapableBeanFactory();
//銷毀指定執行個體 wxMpService是上文注解過的執行個體名稱 name="wxMpService" 或沒注解情況下預設的bean名稱
defaultListableBeanFactory.destroySingleton("wxMpService");
//按照舊有的邏輯重新擷取執行個體,WxMpService是我自己邏輯中的類 擷取要重新整理執行個體下的bean方法
WxMpService wxMpService = wxMpService();
//重新注冊同名執行個體,這樣在其他地方注入的執行個體還是同一個名稱,但是執行個體内容已經重新加載
defaultListableBeanFactory.registerSingleton("wxMpService",wxMpService);
}
@Bean("wxMpService")
public static WxMpService wxMpService() {
... ...
}
原文連結:https://blog.csdn.net/Z_hhhha/article/details/123549819
//getAutowireCapableBeanFactory()
//ApplicationContext 無法注入時,請換種方式,如下:
/**
* @author Joe
* @date 2022/5/26 16:20
*/
@Configuration
public class AppUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
AppUtil.applicationContext = applicationContext;
}
public static DefaultListableBeanFactory getAutowireCapableBeanFactory(){
DefaultListableBeanFactory defaultListableBeanFactory =
(DefaultListableBeanFactory)applicationContext.getAutowireCapableBeanFactory();
return defaultListableBeanFactory;
}
将ApplicationContext 替換注入此類即可