看看Spring的源码,看看巨人的底层实现,拓展思路,为了更好的理解原理,看看源码,深入浅出吧.本文基于Spring 4.0.8版本. 首先Web项目使用Spring是通过在web.xml里面配置 org.springframework.web.context.ContextLoaderListener初始化IOC容器的 <span style="font-family:SimSun;font-size:18px;"><listener> <listene…
在Spring Boot源码分析-启动过程中我们进行了启动源码的分析,大致了解了整个Spring Boot的启动过程,具体细节这里不再赘述,感兴趣的同学可以自行阅读.今天让我们继续阅读源码,了解配置文件加载原理. 基于Spring Boot 2.1.0.RELEASE 在开始阅读源码之前,首先准备三个问题. 什么时候开始加载配置文件? 如何读取相关配置文件内容? 如何区分不同环境的配置? 下面用Spring代替Spring Boot 接下来进入主题,首先关注第一个问题. 一.什么时候开始加载配置…
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Spring Boot 版本:2.2.x 最好对 Spring 源码有一定的了解,可以先查看我的 <死磕 Spring 之 IoC 篇 - 文章导读> 系列文章 如果该篇内容对您有帮助,麻烦点击一下"推荐",也可以关注博主,感激不尽~ 该系列其他文章请查看:<精尽 Spring B…
public static void main(String[] args) {     String url = "jdbc:mysql://172.16.27.11:3306/jdbcTest";     String user = "mysql";     String password = "mysql";     String driverName = "com.mysql.jdbc.Driver";        …
Mybatis源码解析(二) -- 加载 Configuration    正如上文所看到的 Configuration 对象保存了所有Mybatis的配置信息,也就是说mybatis-config.xml 以及 mapper.xml 中的所有信息 都可以在 Configuration 对象中获取到.所以一般情况下,Configuration 对象只会存在一个.通过上篇文章我们知道了mybatis-config.xml 和 mapper.xml 分别是通过 XMLConfigBuilder 和…
一.前言    在日常的开发过程,经常使用或碰到的设计模式有代理.工厂.单例.反射模式等等.下面就对工厂模式模拟spring的bean加载过程进行解析,如果对工厂模式不熟悉的,具体可以先去学习一下工厂模式的概念.在来阅读此篇博文,效果会比较好. 二.知识储备 在介绍本文的之前,不了解或不知道如何解析XML的,请先去学习一下XML的解析.掌握目前主要的几种解析XML中的一种即可,以下博文说明了如何采用Dom4J解析XML文件的,接下去的例子也是常用Dom4J来解析XML.博文地址参考:http:/…
本章主要描述 MyBatis 资源加载模块中的 ClassLoaderWrapper 类和 Java 加载配置文件的三种方式. ClassLoaderWrapper 上一章的案例,使用 org.apache.ibatis.io.Resources#getResourceAsStream(java.lang.String) 方法加载 MyBatis 的配置文件.Resources 是一个提供了多个静态方法的工具类,内部封装了 ClassLoaderWrapper 类的静态字段,Resources …
首先Web项目使用Spring是通过在web.xml里面配置org.springframework.web.context.ContextLoaderListener初始化IOC容器的. <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> 那就以此为切入点顺藤摸瓜. public class…
Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,MyBatis框架等组合使用. IoC介绍 IoC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.如何理…
本文接上一篇文章 SpringIOC 源码,控制反转前的处理(https://mp.weixin.qq.com/s/9RbVP2ZQVx9-vKngqndW1w) 继续进行下面的分析 首先贴出 Spring bean容器的刷新的核心 11个步骤进行祭拜(一定要让我学会了...阿门) // 完成IoC容器的创建及初始化工作 @Override public void refresh() throws BeansException, IllegalStateException { synchroni…
首先我们不要在学习Spring的开始产生畏难情绪.Spring没有臆想的那么高深,相反,它帮我们再项目开发中制定项目框架,简化项目开发.它的主要功能是将项目开发中繁琐的过程流程化,模式化,使用户仅在固定文件中增加特定标签并实现特定逻辑层的代码就能完成项目开发.下面我们来分析web项目启动时bean的初始化过程. 我们遵循类的依赖,引用关系来理清spring在这一过程中的架构和细节实现.java web项目入口在web.xml,Spring在此配置入口servlet完成bean的加载.Dispat…
首先来看一段代码,看过上一节的朋友肯定对这段代码并不陌生.这一段代码诠释了Spring加载bean的完整过程,包括读取配置文件,扫描包,加载类,实例化bean,注入bean属性依赖. <span style="font-size:18px;">public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { //…
首先来看一段代码,看过上一节的朋友肯定对这段代码并不陌生.这一段代码诠释了Spring加载bean的完整过程,包括读取配置文件,扫描包,加载类,实例化bean,注入bean属性依赖. public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. prep…
引言 俗话说的好,不喜欢研究原理的程序员不是好的程序员,不喜欢读源码的程序员不是好的 jser.这两天看到了有关前端模块化的问题,才发现 JavaScript 社区为了前端工程化真是煞费苦心.今天研究了一天前端模块化的问题,先是大概了解了下模块化的标准规范,然后了解了一下 RequireJs 的语法和使用方法,最后研究了下 RequireJs 的设计模式和源码,所以想记录一下相关的心得,剖析一下模块加载的原理. 一.认识 RequireJs 在开始之前,我们需要了解前端模块化,本文不讨论有关前端…
1.springboot项目最核心的就是自动加载配置,该功能则依赖的是一个注解@SpringBootApplication中的@EnableAutoConfiguration 2.EnableAutoConfiguration主要是通过AutoConfigurationImportSelector类来加载 以mybatis为例,*selector通过反射加载spring.factories中指定的java类,也就是加载MybatisAutoConfiguration类(该类有Configurat…
参考原文:http://bbs.pediy.com/thread-217656.htm Android安全–linker加载so流程,在.init下断点: http://www.blogfshare.com/linker-load-so.html 我的源码版本:android-4.4.4_r1 以 [java.lang.Runtime -> load()] 为例来说明(loadLiabrary() 最后和 load() 殊途同归,有兴趣的可以自行分析),对应的 Android 源码在 [srcA…
介绍 在软件开发过程中,总想组件式的开发方式,各个组件之间最好互不影响,独立测试.Prism的Modules很好的满足了这一点. 这个架构图很好了讲解了Prism的Modules的概念 Prism支持通过配置文件,文件夹,手动载入Module的方式,并且对Module的载入进行验证,包括重复和循环依赖验证 Prism加载模块的顺序 直接看源码吧 0.Modules加载 Modules的加载主要依靠ModuleCatalog来发现模块, 通过ModuleManager来加载模块并对模块进行验证以确…
简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository 层中解耦出来,除了这些基本功能外,它还提供了动态 sql.延迟加载.缓存等功能. 相比 Hibernate,Mybatis 更面向数据库,可以灵活地对 sql 语句进行优化. 前面已经说完 mybatis 的使用( Mybatis详解系列(一)--持久层框架解决了什么及如何使用Mybatis ),现…
问题 Mybatis四大对象的创建顺序? Mybatis插件的执行顺序? 工程创建 环境:Mybatis(3.5.9) mybatis-demo,参考官方文档 简单示例 这里只放出main方法的示例,其余类请看demo工程. public static void main(String[] args) throws Exception { // 配置文件路径 String resource = "mybatis-config.xml"; InputStream inputStream…
源码版本:4.4.4_r1 http://www.cnblogs.com/lanrenxinxin/p/4712224.html http://wangzhixian.org/Others/DexClassLoader%E5%92%8CPathClassLoader(3)/article.html…
使用: Picasso.with(this) .load("http://imgstore.cdn.sogou.com/app/a/100540002/467502.jpg") .into((ImageView) findViewById(R.id.ivImage));(1),首先进入Picasso.with(this): 创建一个Picasso类型单例singleton, 接着进入Builder构造函数: 这里是通过传入的context获取全局的context,主要是为了防止内存泄漏…
使用: Picasso.with(this) .load("http://imgstore.cdn.sogou.com/app/a/100540002/467502.jpg") .into((ImageView) findViewById(R.id.ivImage)); (1),首先进入Picasso.with(this): 创建一个Picasso类型单例singleton, 接着进入Builder构造函数: 这里是通过传入的context获取全局的context,主要是为了防止内存泄…
最近我很好奇在RPC中限流熔断降级要怎么做,hystrix已经1年多没有更新了,感觉要被遗弃的感觉,那么我就把眼光聚焦到了阿里的Sentinel,顺便学习一下阿里的源代码. 这一章我主要讲的是FlowRuleManager在加载FlowRule的时候做了什么,下一篇正式讲Sentinel如何控制并发数的. 下面我给出一个简化版的demo,这个demo只能单线程访问,先把过程讲清楚再讲多线程版本. 初始化流量控制的规则:限定20个线程并发访问 public class FlowThreadDemo…
以classpathXmlApplication为例 入口方法包含3个部分, public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent) throws BeansException { super(parent); setConfigLocations(configLocations); if (refresh) { refresh(); }…
Spring Boot作为目前最流行的Java开发框架,秉承"约定优于配置"原则,大大简化了Spring MVC繁琐的XML文件配置,基本实现零配置启动项目. 本文基于Spring Boot 2.1.0.RELEASE版本了解Spring Boot如何启动 首先让我们看一下最简单的Spring Boot启动代码 @SpringBootApplication public class DemoApplication { public static void main(String[] a…
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Spring Boot 版本:2.2.x 最好对 Spring 源码有一定的了解,可以先查看我的 <死磕 Spring 之 IoC 篇 - 文章导读> 系列文章 <精尽 Spring Boot 源码分析 - 序言> <精尽 Spring Boot 源码分析 - Jar 包的启动实现>…
我们的日常开发几乎离不开Spring,他为我们的开发带来了很大的便捷,那么Spring框架是如何做到方便他人的呢.今天就来说说bean如何被加载加载. 我们在xml文件中写过太多类似这样的bean声明 <bean id="jsonParser" class="com.jackie.json.FastjsonJsonParser" /> 那么这样的声明是如果被Spring读取并加载的呢? DefaultListableBeanFactory 继承关系 pu…
Spring bean加载2--FactoryBean情况处理 在Spring bean加载过程中,每次bean实例在返回前都会调用getObjectForBeanInstance来处理FactoryBean的情况. 这边的FactoryBean,Spring设计用于新建复杂bean的,联想下GOF设计模式的创建型,一样的为了解决复杂的bean实例化过程. 其实这边的FactoryBean就是一个factory method[gof定义的意图:定义一个用于创建对象的接口,让子类决定实例化哪个类.…
目标: 1. 什么是AOP, 什么是AspectJ 2. 什么是Spring AOP 3. Spring AOP注解版实现原理 4. Spring AOP切面原理解析 一. 认识AOP及其使用 详见博文1: 5.1 Spring5源码--Spring AOP源码分析一 二. AOP的特点 2.1 Spring AOP 2.1.1 他是基于动态代理实现的 Spring 提供了很多的实现AOP的方式:Spring 接口方式,schema配置方式和注解的方式. 如果使用接口方式引入AOP, 就是用JD…
一. AOP切面源码分析 源码分析分为三部分 1. 解析切面 2. 创建动态代理 3. 调用 源码的入口 源码分析的入口, 从注解开始: 组件的入口是一个注解, 比如启用AOP的注解@EnableAspectJAutoProxy. 在注解的实现类里面, 会有一个@Import(""). 这个@Import("")就是引入的源码实现类. 比如AOP的@Import(AspectJAutoProxyRegistrar.class) 通常, Spring要开启某一个功能,…