早期用XML配置Bean,后来用@Bean或@Component注解来注册Bean。但有时动态创建的对象,并不方便用注解来实现。
可以用下面的方法手动注册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语法糖。