一,为什么读Spring源码
如果你是一名JAVA开发人员,你一定用过Spring Framework。作为一款非常经典的开源框架,从2004年发布的1.0版本到现在的5.0版本,经历了15年的洗礼,持久不衰与其说现在是JAVA的天下,不如说是Spring的天下。
- 对面试有帮助
- 对学SpringMVC有帮助
- 对学SpringBoot有帮助
- 借鉴一些设计模式与思路
- 激情与毅力,能读懂Spring,其它的框架没什么可怕
二,Spring源码的核心组件
IOC容器负责实例化、定位、配置应用程序的对象及建立这些对象间的依赖
IOC容器:spring-anno是Spring最底层的框架它依赖一个jar包叫spring-context它里面包含Spring一些核心的jar例如spring-aop啊一些的,Spring5最大特点就是只是注解。 通过源码发现IOC的底层是个大Map。
咱们平时用Spring的时候都会写一个XXServiceImpl这种的Service实现上面都会加一个”@Service“的注解,这个注解可以理解为作为Key,Value对存放在底层的大Map里(注Map是安全的),例如map.put("XXServiceImpl",XXServiceImpl),值就是这个对象的实例(启动Tomcat会自动创建||启动程序自动创建的实例(启动调用getBean()))。那么在咱们的Controller中的注解”@Autowired“就相当于根据Key找对应的Value(对应的实现类)例如map.get("XXServiceImpl")。
想了解具体源码剖析可以参考:https://www.jianshu.com/p/e4ca039a2272
AOP面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
我们一般都用过@Transactional,如下做一些增删改的操作,在这里@Transactional的作用是把它们放一块管理事务。这种其实就是面向切片(AOP),面向代码段进行切片
@Transactional
Public int updateOrder(){
insert..
update...
select..
}