早期用XML配置Bean,后來用@Bean或@Component注解來注冊Bean。但有時動態(tài)創(chuàng)建的對象,并不方便用注解來實現(xiàn)。
可以用下面的方法手動注冊Bean:
public static void registerDataSource(Object dataSource, String beanName) {
var beanFactory = (DefaultListableBeanFactory) SpringUtil.getApplicationContext().getAutowireCapableBeanFactory();
beanFactory.registerSingleton(beanName, dataSource);
}
對應的銷毀Bean的方法:
public static void destroyDataSource(String dsId) {
var beanFactory = SpringUtil.getApplicationContext().getAutowireCapableBeanFactory();
var ds = getDataSource(dsId);
beanFactory.destroyBean(ds); //或者用DefaultListableBeanFactory.destroySingleton的方法
}
上面的代碼基于java17,使用了var語法糖。