Spring Boot 如何实现Bean的刷新

本文介绍了如何在Spring Boot中实现Bean的刷新,从理解Bean的singleton和prototype作用域开始,逐步讲解如何建立自定义作用域,使用refresh作用域以及通过RefreshScope类实现Bean的动态刷新。同时强调了在刷新过程中考虑缓存的重要性,以避免不必要的资源浪费。
摘要由CSDN通过智能技术生成

1. 从无到有 —— 了解Bean容器

首先得了解Scope(作用域),简单介绍两种。

1. singleton 单例类型
整个程序运行期间,Spring容器只会有一个对应类的Bean实例,不管被加载到哪里使用,都是一个实例对象。
曾经,我犯过一个错。将公用返回对象以默认的方式加载至Spring容器(笑)

2. prototype 原型类型
和单例相反,这种加载模式,Bean实例不管在哪里被获取,都不是同一个对象。
刚好可以解决上面,公用返回对象的问题(笑)(笑)

2. 如何实现 —— 建立自己的作用域

毕竟面向浏览器编程的我,也不是白吹的。

浏览器启动 -> spring bean 自定义作用域 -> 点击 -> 浏览 -> 原来如此 -> 点赞 -> 再见

等等,我看的啥来着?

// 注册一个名叫 “refresh” 的bean作用域,处理对象是 RefreshScope的实例
applicationContext.getBeanFactory().registerScope("refresh", refreshScope);

RefreshScope类需要实现Scope接口

<
Spring Boot提供了多种方式来动态注册bean: 1. 使用@Bean注解 可以使用@Bean注解在@Configuration类中动态注册bean。例如: @Configuration public class MyConfig { @Bean public MyBean myBean() { return new MyBean(); } } 在运行时,可以使用ApplicationContext的registerBean方法来动态注册这个bean: @Autowired private ApplicationContext context; public void registerMyBean() { context.registerBean(MyBean.class, () -> new MyBean()); } 2. 使用@ComponentScan注解 可以使用@ComponentScan注解扫描指定的包路径,动态注册bean。例如: @Configuration @ComponentScan("com.example.beans") public class MyConfig {} 在运行时,可以使用ApplicationContext的refresh方法来刷新ApplicationContext,从而加载并注册所有被@ComponentScan扫描到的bean。 @Autowired private ApplicationContext context; public void refreshContext() { context.refresh(); } 3. 使用FactoryBean 可以实现FactoryBean接口来动态创建bean。例如: public class MyFactoryBean implements FactoryBean<MyBean> { @Override public MyBean getObject() throws Exception { return new MyBean(); } @Override public Class<?> getObjectType() { return MyBean.class; } @Override public boolean isSingleton() { return true; } } 在运行时,可以使用ApplicationContext的registerBean方法来动态注册这个FactoryBean: @Autowired private ApplicationContext context; public void registerMyFactoryBean() { context.registerBean("myBean", MyFactoryBean.class); } 以上三种方式都可以动态注册bean,根据具体场景来选择合适的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值