如题,运行时这个方法会搜集现有的符合条件的bean来生成一组bean并注册,现在我想在运行时动态修改,比如删除或增加,应该怎样重新执行这个注解标识的方法来刷新呢?
@RefreshScope 可以通过配置文件触发刷新 bean。
问过claude,没有给出有效的方案 ![]()
这个bean定义在依赖的黑盒jar包的,没办法动 ![]()
bytebuddy 字节码强行修改类, 最简单的方法就是本地利用双亲委派机制重写源码类到项目中
不能改源码,只能修改字节码了。
你知道你要销毁的这些bean叫啥名字吗,能不能从factory拿出来然后删掉,然后注册新的,这些bean还有其他依赖吗
@Autowired
private ConfigurableApplicationContext context;
@PostMapping("/recreate-bean")
public String recreateBean() {
// 1. 获取 BeanFactory
DefaultListableBeanFactory beanFactory =
(DefaultListableBeanFactory) context.getBeanFactory();
// 2. 销毁旧的 Bean
String beanName = "myCustomBean";
if (beanFactory.containsBean(beanName)) {
beanFactory.destroySingleton(beanName);
}
// 3. 重新注册 Bean
Object newBean = createMyBean(); // 调用你的创建方法
beanFactory.registerSingleton(beanName, newBean);
return "Bean recreated successfully";
}
private Object createMyBean() {
// 这里是你原来 @Bean 方法的逻辑
return new MyCustomBean();
}
已经被引用了,新注册的bean只是在容器里,引用的还是旧的。
佬,好像社区规定不让回复去问ai
可以截图啊
可以的佬,AI生成的内容必须截图回复;
社区规定的是,不让在底下回复,让楼主去问ai;因为这样没有帮上忙;
我也考虑这样做,删除的部分做了,就是重新注册这块不知道怎么做
因为这个bean是通过构造方法注入的,有很多对别的bean的依赖
看下来没有可用的方案 ![]()
这个虽然可以改字节码,但是注册过程中还有一些操作,比如注册路由这些
这确实是个麻烦事 ![]()
可以在你的项目中创建一个包路径一样的类,类加载器会优先加载项目中的,比字节码更加方便
BeanDefinitionRegistry




