zoukankan      html  css  js  c++  java
  • 拉勾笔记02(1)Spring IOC和AOP应用篇

    拉勾笔记02(1)Spring IOC和AOP应用篇

    1、应用

    1.1、什么是IOC和DI

    1.1.1、IOC

    inversion of control(控制反转),控制反转是一个技术思想,而不是技术实现。

    无需自己去new对象,而是由IOC容器去帮助我们实例化并管理,当需要对象的时候,直接去问IOC要即可。

    img点击并拖拽以移动

    1.1.2、AOP

    AOP(Aspect Oriented Programming)面向切面编程,其实是OOP的延续。AOP的出现主要是解决在不改变原有业务逻辑情况下,增强横切逻辑代码。

    切:指的是横切逻辑,原有业务逻辑代码不动,只操作横切代码逻辑。

    面:横切逻辑往往要影响的是很多方法,每个方法如同一个点,多个点构成一个面。

    1.2、BeanFactory与ApplicationContext区别

    img点击并拖拽以移动

    如上图的继承图可知,BeanFactory是Spring框架中IOC容器的顶层接口,用来定义一些基础和规范。而ApplicationContext是它的一个子接口,所以ApplicationContext是具备BeanFactory提供的全部功能。

    1.3、Bean详解

    1.3.1、xml方式

    作用范围

    如果使用xml方式创建bean,bean标签中会有scope属性用来声明作用范围

    <!--配置service对象-->
    <bean id="transferService"
    class="com.lagou.service.impl.TransferServiceImpl" scope="singleton">
    </bean>
    

    点击并拖拽以移动

    img点击并拖拽以移动

    scope中可选的属性值有如上几种

    1. 单例模式:singleton(ioc容器中仅有单例bean存在)
    2. 多例模式:prototype(每次从ioc容器中获取bean的时候,都会返回一个新实例)
    3. 多例模式:request(每次Http请求会创建一个新的实例)
    4. 多例模式:session(同一Http Session共享一个bean)
    Bean标签属性

    在基于xml的IoC配置中,bean标签是最基础的标签。它表示了IoC容器中的⼀个对象。换句话
    说,如果⼀个对象想让spring管理,在XML的配置中都需要使⽤此标签配置,Bean标签的属性如
    下:

    • id属性: ⽤于给bean提供⼀个唯⼀标识。在⼀个标签内部,标识必须唯⼀。
    • class属性:⽤于指定创建Bean对象的全限定类名。
    • name属性:⽤于给bean提供⼀个或多个名称。多个名称⽤空格分隔。
    • factory-bean属性:⽤于指定创建当前bean对象的⼯⼚bean的唯⼀标识。当指定了此属性之后,class属性失效。
    • factory-method属性:⽤于指定创建当前bean对象的⼯⼚⽅法,如配合factory-bean属性使⽤,则class属性失效。如配合class属性使⽤,则⽅法必须是static的。
    • scope属性:⽤于指定bean对象的作⽤范围。通常情况下就是singleton。当要⽤到多例模式时,可以配置为prototype。
    • init-method属性:⽤于指定bean对象的初始化⽅法,此⽅法会在bean对象装配后调⽤。必须是⼀个⽆参⽅法。
    • destory-method属性:⽤于指定bean对象的销毁⽅法,此⽅法会在bean对象销毁前执⾏。它只能为scope是singleton时起作⽤。
    DI依赖注入
    • 构造器注入:⽤带参构造函数实现对类成员的数据赋值
    • set方法注入:它是通过类成员的set⽅法实现数据的注⼊

    1.4、高级特性

    1.4.1、延迟加载

    ApplicationContext容器的默认行为是启动服务时将所有singleton bean提前进行实例化。提前实例化意味着作为初始化的一部分,ApplicationContext实例会创建并配置所有的singleton bean。

    <bean id="testBean" class="cn.lagou.LazyBean" />
    该bean默认的设置为:
    <bean id="testBean" calss="cn.lagou.LazyBean" lazy-init="false" />
    

    如果不想让singleton bean在ApplicationContext初始化时候提前实例化,那么可将bean设置为延迟实例化

    <bean id="testBean" calss="cn.lagou.LazyBean" lazy-init="true" />
    

    1.4.2、 FactoryBean和BeanFactory

    BeanFactory是容器的顶级接口,定义容器的一些的基础行为,是负责生产和管理Bean的一个工厂

    Spring中Bean有两种,一种是普通bean,一种是工厂Bean(FactoryBean),FactoryBean可以生成某一个类型的Bean实例,这里也就是说它的作用主要是自定义Bean的创建过程

    1.4.3、SpringBean的生命周期

    image-20200829191155984

    Spring容器启动的过程中,会将Bean解析为Spring内部的BeanDefinition结构

    image-20200829222844943

    由上图BeanDefinition所有方法结构可知,BeanDefinition作用是将Bean的定义信息存储在BeanDefinition相应的属性中,例如类名、属性、构造函数参数列表等等,后续对Bean的操作就直接对BeanDefinition进行即可。

    2、源码

    因源码篇幅较长,单独开一篇

  • 相关阅读:
    Hyperledger Fabric的容灾备份及恢复方法
    Sentinel使用
    Fabric1.4 架构和原理
    centos开放指定端口
    Python使用ProtoBuffer
    C++动态创建对象
    Shell笔记
    Go语言基础(二)
    Go语言基础(一)
    git常用命令
  • 原文地址:https://www.cnblogs.com/xpang0/p/13583863.html
Copyright © 2011-2022 走看看