事务控制分类 编程式事务控制          自己手动控制事务,就叫做编程式事务控制. Jdbc代码: Conn.setAutoCommite(false);  // 设置手动控制事务 Hibernate代码: Session.beginTransaction();    // 开启一个事务 [细粒度的事务控制: 可以对指定的方法.指定的方法的某几行添加事务控制] (比较灵活,但开发起来比较繁琐: 每次都要开启.提交.回滚.) 声明式事务控制 Spring提供了对事务的管理, 这个就叫声明式事…
一.AOP分析 问题1:AOP是什么? Aspect Oriented Programming 面向切面编程,在不改变类的代码的情况下,对类方法进行功能增强. 问题2:我们需要做什么? 在我们的框架中要向使用用户提供AOP功能,让他们可以通过AOP技术实现对类方法进行功能增强. 从"Aspect Oriented Programming 面向切面编程,在不改变类的代码的情况下,对类方法进行功能增强"这句话我们能得到下面的这些信息: 二.AOP概念学习 我们先来看一下下面的这张图 说明:…
一.为什么要提供配置的方法 经过前面的手写Spring IOC.手写Spring DI.手写Spring AOP,我们知道要创建一个bean对象,需要用户先定义好bean,然后注册到bean工厂才能创建一个bean对象.代码如下: static PreBuildBeanFactory bf = new PreBuildBeanFactory(); GenericBeanDefinition bd = new GenericBeanDefinition(); bd.setBeanClass(ABe…
一.IOC分析 1. IOC是什么? IOC:Inversion of Control控制反转,也称依赖倒置(反转) 问题:如何理解控制反转? 反转:依赖对象的获得被反转了.由自己创建,反转为从IOC容器中获取(和自动注入) 2. IOC容器带来什么好处? 1)代码更简洁,不需要去new需要使用的对象了. 2)面向接口编程,使用者与具体类解耦,易扩展.替换实现者. 3)可以方便进行AOP增强.进行AOP的前提是有IOC 3. IOC容器做什么工作? IOC容器的工作:负责创建.管理类实例,向使用…
前言 上篇文章中介绍了Spring容器的扩展点,这个是在Bean的创建过程之前执行的逻辑.承接扩展点之后,就是Spring容器的另一个核心:Bean的生命周期过程.这个生命周期过程大致经历了一下的几个阶段 在本节中重点介绍实例化.填充装配.唤醒Aware方法.BeanPostProcessor后置处理.初始化等过程.关于Bean的销毁过程这里不再介绍.由于Bean的生命周期的维护过程实际上都是由BeanFactory负责,所以在开始Bean的生命周期过程详解之前,先概览性了解BeanFactor…
前言 前文中主要介绍了Spring中处理BeanDefinition的扩展点,其中着重介绍BeanDefinitionParser方式的扩展.本篇文章承接该内容,详解Spring中如何利用BeanDefinitionParser的特性实现注解配置的解析.本文主要从以下几个方面介绍Spring中的注解配置解析原理: @Component系注解配置的作用原理 @Autowired注解配置的作用原理 无论注解配置还是XML配置,只是外在配置形式的变化,但是Spring的核心仍然是相同的: @Compo…
一.前言 回顾 在Spring源码系列第二篇中介绍了Environment组件,后续又介绍Spring中Resource的抽象,但是对于上下文的启动过程详解并未继续.经过一个星期的准备,梳理了Spring中的BeanDefinition以及它的解析和注册过程.本文着重介绍其特点及用途并延续前面上下文启动过程的步骤继续分析源码. 目录 本文主要从以下几个方面介绍BeanDefinition 什么是BeanDefinition BeanDefinition解析注册过程及组件概览 从路径到资源加载 资…
简介 spring-bean 组件是 Spring IoC 的核心,我们可以使用它的 beanFactory 来获取所需的对象,对象的实例化.属性装配和初始化等都可以交给 spring 来管理. 本文将从DefaultListableBeanFactory.getBean(Class)方法开始分析获取 bean 的过程,主要内容如下,由于篇幅较长,可以根据需要选择阅读: beanFactory 的设计 多个 beanName 的处理 获取单例 bean 创建单例 bean bean 的实例化 b…
简介 前面已经讲完 spring-bean( 详见Spring ),这篇博客开始攻克 Spring 的另一个重要模块--spring-aop. spring-aop 可以实现动态代理(底层是使用 JDK 动态代理或 cglib 来生成代理类),在项目中,一般被用来实现日志.权限.事务等的统一管理. 我将通过两篇博客来详细介绍 spring-aop 的使用.源码等.这是第一篇博客,主要介绍 spring-aop 的组件.架构.使用等. 项目环境 maven:3.6.3 操作系统:win10 JDK…
简介 spring-aop 用于生成动态代理类(底层是使用 JDK 动态代理或 cglib 来生成代理类),搭配 spring-bean 一起使用,可以使 AOP 更加解耦.方便.在实际项目中,spring-aop 被广泛用来实现日志.权限.事务.异常等的统一管理. 上一篇博客(Spring源码系列(三)--spring-aop的基础组件.架构和使用)简单讲了 spring-aop 的基础组件.架构和使用方法,本文将开始研究 spring-aop 的源码,主要分成以下部分: spring-aop…