天天看點

【Java 重新加載bean 上下文 重新整理bean】

@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 替換注入此類即可