zoukankan      html  css  js  c++  java
  • 互联网轻量级框架SSM-查缺补漏第九天

      简言:

    第九章 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容器的设计主要基于BeanFactoryApplicationContext两个接口。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)

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

  • 相关阅读:
    EFCore实践教程三
    EFCore实践测试二
    EFCore实践测试一
    git学习3
    git学习2
    git学习1
    ABP学习
    autofac笔记
    时间计算本质理论3-平行宇宙,对未来的子线程计算
    时间计算本质理论2-时间计算速度的不同步
  • 原文地址:https://www.cnblogs.com/shiboinfo/p/10298423.html
Copyright © 2011-2022 走看看