Scope
只有两种:
- singleton 单例,每次从spring容器中获取到的bean都是同一个对象 。
- prototype 多例,每次从spring容器中获取到的bean都是不同的对象 。
- RequestScope 同一次请求从spring容器中获取到的bean都是同一个对象 。
- SessionScope 同一个会话从spring容器中获取到的bean都是同一个对象 。
比如 , 我们想在同一个线程中从spring容器获取到的bean都是同一个对象,该怎么办?
这就需要自定义Scope了 。
第一步实现Scope接口:
public class ThreadLocalScope implements Scope {private static final ThreadLocal THREAD_LOCAL_SCOPE = new ThreadLocal();@Overridepublic Object get(String name, ObjectFactory<?> objectFactory) {Object value = https://www.huyubaike.com/biancheng/THREAD_LOCAL_SCOPE.get();if (value != null) {return value;}Object object = objectFactory.getObject();THREAD_LOCAL_SCOPE.set(object);return object;}@Overridepublic Object remove(String name) {THREAD_LOCAL_SCOPE.remove();return null;}@Overridepublic void registerDestructionCallback(String name, Runnable callback) {}@Overridepublic Object resolveContextualObject(String key) {return null;}@Overridepublic String getConversationId() {return null;}}
第二步将新定义的Scope注入到spring容器中:@Componentpublic class ThreadLocalBeanFactoryPostProcessor implements BeanFactoryPostProcessor {@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {beanFactory.registerScope("threadLocalScope", new ThreadLocalScope());}}
【Spring让人眼前一亮的11个小技巧】第三步使用新定义的Scope:@Scope("threadLocalScope")@Servicepublic class CService {public void add() {}}
最后说一句(求关注,别白嫖我)如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力 。求一键三连:点赞、转发、在看 。
关注公众号:【苏三说技术】 , 在公众号中回复:面试、代码神器、开发手册、时间管理有超赞的粉丝福利,另外回复:加群,可以跟很多BAT大厂的前辈交流和学习 。
推荐阅读
- Spring Cloud Consul 入门指引
- 原神怎么让正机之神瘫痪
- 一个 dubbo 和 springboot 的兼容性问题
- 一篇文章带你掌握主流基础框架——Spring
- 【持久层框架】- SpringData - JPA
- SpringBoot的starter到底是什么?
- Springboot 之 HandlerMethodReturnValueHandler 运用
- Spring mvc源码分析系列--Servlet的前世今生
- spring cron表达式源码分析
- QQ怎么建群啊(qq建群怎么让人变多)