简言:

第九章 Spring Ioc的概念

  IoC(Inversion of Control)控制反转:比如想喝橙汁,在没有饮品店的日子,最直观的做法是买果汁机、橙汁。这是你自己“主动”创造的过程,也就是一杯橙汁需要主动创造。然而到了今时今日,由于饮品店的盛行,已经没必要自己去榨橙汁了。饮品店提供给你橙汁,这一过程你没有去“主动”创造,但是也完全达到了你的要求。这就是控制反转。

  在Spring中,它会认为一切Java类都是资源,而资源都是Bean,容纳这些Bean的是Spring所提供的IoC容器,所以Spring是一种基于Bean的编程。

  Spring ioc 容器

  在Spring中实现控制反转的是IoC容器,其实现方式是依赖注入(Dependency Injection,DI),简单的说,Ioc容器是用来存放一些实例的,通过依赖注入,将实例注入Ioc容器,此时你不需要去主动创建实例,只需要从Ioc容器中取就好了。

  Spring IoC容器的设计主要基于BeanFactory和ApplicationContext两个接口。ApplicationContext是BeanFactory的子接口之一,换句话说BeanFactory是Spring IoC容器说定义的最底层接口,而ApplicationContext是其高级接口之一。

  Spring IoC容器的初始化和依赖注入

  过程:先定义Bean,然后初始化Bean,然后依赖注入Spring IoC容器。

  Bean的定义:

  1. Resource定位,这步是Spring Ioc根据开发者的配置,进行资源定位。在Spring的开发过程中,开发者通过XML或注解进行配置。
  2. BeanDefinition的载入,这个时候只是将Resource定位到的信息,保存到Bean定义(BeanDefinition)中,此时部位创建Bean的实例。
  3. BeanDefinition的注册,这个过程就是将BeanDefinition的信息发布到Spring Ioc 容器中。注意,此时仍旧没有对应的Bean的实例创建。

  Bean的初始化:

  Spring Bean还有一个配置选项——lazy-init,其含义及时是否初始化Spring Bean(意思是时候采用懒汉模式)。默认值为false,默认会自动初始化Bean。如果将其设置为true,那么只有当我们使用Spring IoC容器的getBean方法获取它时,它才会进行Bean的初始化,完成依赖注入。

  Spring Bean的生命周期

  一下是Spring Bean的生命周期过程:

  

  第十一章 面向切面编程(AOP)

  如果说IoC是Spring的核心,那么面向切面编程就是Spring最为重要的功能之一了,在数据库事务中,切面编程被广泛使用。

  AOP:通过动态代理模式,带来管控各个对象操作的切面环境,管理包括日志、数据库事务等操作,让我们拥有可以在反射原有对象方法之前正常返回、异常返回时候插入自己的路基代码的能力,有时候甚至取代原有方法。

  相关概念:

  1.切面(Aspect)

  切面就是在一个怎么杨的环境中工作。在动态代理中可以把它理解成一个拦截器。

  2.通知(Advice)

  通知是切面开启后,切面的方法,它根据在代理对象真实方法调用前、后的顺序和逻辑区分。

  • 前置通知(Before):在动态代理反射原有对象或者执行环绕通知前执行的通知功能。
  • 后置通知(After):在动态代理反射原有对象方法或者执行环绕通知后执行的通知功能。无论是否抛出一行,它都会被执行
  • 返回通知(AfterReturning):在动态代理对象反射原有对象方法或者执行环绕通知后,正常返回(无异常)执行的通知功能。
  • 异常通知(AfterThrowing):在动态代理对象反射原有对象方法或者执行环绕通知后,产生异常执行的通知功能。
  • 环绕通知(Around):在动态代理中,它可以取代当前被拦截对象的方法,提供回调原有被拦截对象的方法。

  3.引入(Introduction)

  允许我们在现有的类里添加自定义的类和方法。

  4.切点(Pointcut)

  告诉SpringAOP在什么时候启动拦截并织入对应的流程中,因为并不是所有的开发都需要启动AOP的,它往往通过正则表达式进行限定。

  5.连接点(join point)

  连接点对应的是具体需要拦截的东西,比如通过切点的正则表达式去判断哪些方法是连接点,从而织入对应的通知。

  6.织入(Weaving)

  织入是一个生成代理对象并将切面内容放入到流程中的流程。

互联网轻量级框架SSM-查缺补漏第九天的更多相关文章

  1. 互联网轻量级框架SSM-查缺补漏第六天【级联+延迟加载特辑】

    简言:本来这是昨天看的,但是因为想好好写一下[级联]这个东西,所以就看完之后今天来整理一下. 级联 1. 什么是级联 级联是一个数据库实体的概念.比如教师就需要存在学生与之对应,这样就有教师学生表,一 ...

  2. 互联网轻量级框架SSM-查缺补漏第八天(MyBatis插件plugin使用及原理)

    简言:今天进行第八天的记录(只是写了八天).有的时候看的多,有的时候看的少,看的少的时候就攒几天一起写了.而今天这个插件我昨天写了一下午,下班没写完就回去了,今天把尾收了,再加上一个过程图方便下面原理 ...

  3. 互联网轻量级框架SSM-查缺补漏第一天

    简言:工欲其事必先利其器,作为一个大四的准毕业生,在实习期准备抽空补一下基础.SSM框架作为互联网的主流框架,在会使用的基础上还要了解其原理,我觉得会对未来的职场会有帮助的.我特意的买了一本<J ...

  4. Java EE互联网轻量级框架整合开发— SSM框架(中文版带书签)、原书代码

    Java EE互联网轻量级框架整合开发 第1部分 入门和技术基础 第1章 认识SSM框架和Redis 2 1.1 Spring框架 2 1.2 MyBatis简介 6 1.3 Spring MVC简介 ...

  5. Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解

    上篇文章介绍了自定义View的创建流程,从宏观上给出了一个自定义View的创建步骤,本篇是上一篇文章的延续,介绍了自定义View中两个必不可少的工具Canvas和Paint,从细节上更进一步的讲解自定 ...

  6. Android查缺补漏(IPC篇)-- Bundle、文件共享、ContentProvider、Messenger四种进程间通讯介绍

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8387752.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  7. Android查缺补漏(IPC篇)-- 款进程通讯之AIDL详解

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8436529.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  8. Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8515304.html 一.AsyncTask的使用 AsyncTask是一种轻 ...

  9. Android查缺补漏(IPC篇)-- 进程间通讯之AIDL详解

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8436529.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  10. CSS查缺补漏篇

    前面的话:关于CSS,之前我已经做过一些基础的知识点介绍.CSS主要是用来给页面设置样式的,一般说来,在一个网站中,CSS应该独立封装在一个单独的.css外部文件中.样式的设置总体来说是不难的,但是需 ...

随机推荐

  1. Linux 开启路由转发功能

    想让一台Red Hat Enterprise Linux 7开通iptables的nat转发功能 A服务器:192.168.30.20/24 B服务器:192.168.30.1/24,eth0; 19 ...

  2. 关于jxl的getCellFormat()方法获取表格样式----中文货币乱码

    File templateFile = getTempalte(client.getSc_shortName());//这里读取模板文件 WorkbookSettings set1 = new Wor ...

  3. uC/OS-II 函数之消息队列相关函数

    上文主要介绍了信号量相关的函数,本文介绍消息队列相关的函数:OSQCreate()建立消息队列函数,OSQPend()任务等待消息函数,其他的消息函数. 消息队列介绍 消息队列是µC/OS-II中另一 ...

  4. Ubuntu如何配置网桥 Ubuntu系统配置网桥详细教程

    注意:如果是在ubuntu桌面版本上使用,图形化控制与ifupdown配置不兼容.如果使用ifupdown来配置,需要禁止使用图形化控制. 本文经过本人结合网络内容亲身实践,配置通了ifupdown ...

  5. python学习,day1作业:设计一个三级菜单

    设计一个三级菜单,要求能够下钻,能够推出,比较笨的方法 # coding=utf-8 # Author: RyAn Bi data = { 'beijing':{ 'changping':{ 'wud ...

  6. 命令行查看系统中保存的wifi密码

    我们经常遇到一种情况,就是电脑连接了wifi,但是却忘记了密码是多少,而且我们知道电脑肯定有备份,不然下次也无法连接不是,那么我们改如何获取这个密码呢?XP,Win7时代,wifi密码是可以通过网络属 ...

  7. 单臂vlan路由实现过程

    单臂路由拓扑图如下: 实现步骤如下: 1)pc的ip自己配置. 2)在交换机的各个端上划分好vlan 下联口:vlan 10     port g1/0/2 vlan 20   port g1/0/3 ...

  8. 剑指offer——面试题17:打印从1到最大的n位数

    用字符串模拟加法: #include"iostream" #include"string.h" using namespace std; bool AddOne ...

  9. 1.使用frp穿透内网

    1.前因后果 1.1弃用ngrok 为节约服务器成本,花了500多块买了一个华为云得1G 1核心 5M得云服务器.然后用ngrok来穿透内网.一直用得还  但是今天在弄nginx得时候发现 ngrok ...

  10. Oracle初始化数据库表空间、用户、表(索引、分区)等

    [oracle@bogon orcl]$ sqlplus sys/sys as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Wed Oct 8 ...