0x0 前言
原理很简单,spring本身提供了相应的bean移除、bean定义和生成接口,只需要调用相关接口即可实现功能
0x1 代码
//获取bean工厂
DefaultListableBeanFactory beanFactory = applicationContext.getDefaultListableBeanFactory();
//移除beanDefinition,注意,这里spring会帮我们把相关依赖也移除
beanFactory.removeBeanDefinition("testService");
//自定义一个新的bean class
RootBeanDefinition bd = new RootBeanDefinition(subClass);
bd.setScope(SCOPE_SINGLETON);
//注册bean definition,之后如果相关的bean
beanFactory.registerBeanDefinition("testService", bd);
经测试,以上方法替换bean之后,
在容器调用到testService之后会重新创建一个bean,执行其PostConstruce以及PreDestroy,并且其内部的EventListener和切面注解都会生效
网友评论