重学spring(三) Spring IOC 源码分析--获取单例Bean
简介上一篇文章演演示了Bean的生命周期,我们从容器中获取bean使用一般是 ctx.getBean("xxx"),但这个这个方法具体做了哪些事情我们并不知道,在这篇文章我将详细分析getBean("xxx")方法实现细节,代码比较长,分析不到位的地方,请见谅。 源码分析入口getBean(String)源码ctx.getBean("xxx") 调用了BeanFactory 接口的getBean(String...
重学spring(一) Spring中Bean实例化的四种方式
从工作开始到现在一直都有使用Spring,日常开发中总有spring的身影,但实话实讲,对spring的认识一直停留在使用阶段,只知其然。做技术当然不能这样,柄着知其所以然的态度,想系统的学习分析一下spring,无奈懒惰让我一直没有着手做。不积跬步,无以至千里,万事得开个头,终于下定决定写下第一篇。 tip: 本系列根据spring 5.2.6.RELEASE 进行分析。 引入spring依赖 123456789101112<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.2.6.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> ...
spring中发布订阅模式实践
概述在实际开发中,经常会碰到要去解耦合一些依赖调用,比如单成功后会发送手机短信、发送绑定邮箱、数据库更新后通知发送mq等。而且通知这个操作又不希望强耦合在主业务流程中,这个时候我们很容易就想到了发布订阅(观察者)设计模式。 首先看代码实现: 定义事件类型 1234567891011121314151617import org.springframework.context.ApplicationEvent;public class MessageEvent extends ApplicationEvent { private String message; public MessageEvent(Object source, String message) { super(source); this.message = message; } public String getMessage() { return message; ...
mybatis查询大量数据内存溢出解决办法
平常使用mybatis时并没有考虑内存问题,但今天遇到一件事情是一次需要查询的数据量很大,直接导致系统oom,所以对需要大量查询的sql做了如下修改… 12345678910111213141516171819@Autowiredprivate SqlSessionTemplate sqlSessionTemplate;@Testpublic void test() { MerchantOrderPushExample merchantOrderPushExample = new MerchantOrderPushExample(); MerchantOrderPushExample.Criteria criteria = merchantOrderPushExample.createCriteria(); criteria.andIdIsNotNull(); merchantOrderPushExample.setOrderByClause(" id desc"); HashMap<String,...