美文网首页Spring
Spring | 简介(上)

Spring | 简介(上)

作者: 不一样的卡梅利多 | 来源:发表于2020-05-11 16:03 被阅读0次

    参考资源

    • Spring

    spring 官网
    Spring docs
    Spring boot docs
    Spring cloud docs
    博客
    版本 1 < 3.0
    版本 2 > 3.0

    • 书籍

    《Spring in Action》
    《Pro Spring 5》
    Spring 5 Design Patterns
    《spring 源码分析》

    目标与思想

    目标
    1. 抽象封装业务共同代码 ,比如JdbcTemplate
    2. 解耦技术代码与业务代码 AOP 、IOC
    3. 实现行业规范, 比如 OAuth ,JSR-XXXX
    4. 集成三方框架提供统一接口,RestTamplate ,PlatformTransactionManager
    5. 让企业开发关注业务开发,并简化业务开发,提供高质量的框架代码
    IOC 和AOP
    IOC

    在java 中我们使用一个对象代码

        Object obj =new Object()
                   obj.init()
                   obj.set()
                   obj.doSomething() 
    

    复用
    在所有的应用开发中,我们使用对象都有两个共同点,1、我们使用对象前,都必须先进行创建对象(业务代码无关)2、将对象连接到一起,通过构造函数或者set 方法 (业务无关代码),这两点业务无关的代码,是所有应用开发的共同的地方,是可以复用的。

    设计思想
    1、解耦,将对象的创建和使用进行解耦。
    2、通过配置对象之间的连接关系,这样系统在使用之前就组合好了相关的依赖关系。

    比如我们开车
    以前:
    1、我们先自己生产零件
    2、我们自己将零件进行连接并且组装成一辆车
    3、开车
    以后:
    1、告诉spring 有什么零件,零件怎么连接-配置
    2、spring 完成零件的生产和连接
    3、开车

    理解IOC
    Ioc (Inversion of Control) 控制反转
    对象的生成和连接(依赖关系) 由开发人员编码控制转变 spring控制,spring 实现了控制权限的反转。 实际上,我们也可以用其词汇来描述这件事情,但是行业和官方是用这个词汇来表示这件事情。用Ioc 来描述更容易交流

    bean 容器-对象构建
    java 可以依据类名 通过反射来实现对象的创建。这是java 实现beans 容器的基础。其他语言可以有其他方式实现容器功能,但是思路应该是类似的。对象的创建委派给spring ,spring 使用了工厂和抽象工厂模式来创建对象,还可以缓存对象比如单例提供对象的复用率。这个单例与单例模式中的单例不一样。单例模式主要是为了系统中全局资源的统一管理。

    依赖注入-对象连接
    从spring 完成的事情来看,依赖注入 是spring 完成对象(类)关系连接的一种手段。从代码 层面来看,依赖注入有两种方式,构造函数和set 方式。从扩展性和灵活性来看,我们应该尽量依赖的是接口(抽象)而不是实现,我们的实现可能会发送变化,接口是一个契约协议,稳定的。通过依赖注入,我们就可以灵活替换实现方式。而不用改动代码, 这也是spring 设计的一个目标,让使用者不改变代码,能够实现功能的替换。spring 做了创建对象,连接对象(依赖注入)。开发人员 应该是面向接口编程而不是实现编程,这样才能更好的利用好依赖注入。

    AOP

    需求
    我们在完成功能需求(业务开发)的同时,通常会有很对附加功能,比如 记录日志、安全、事务、缓存 、错误处理,性能监控、自定义业务规则。这些代码通常会和业务代码混合在一起。 我们应该把业务代码和非业务代码区别开来,非业务代码是稳定的,改动较少。把业务代码和非业务代码的组织关系委派给框架来做。让企业开发专注业务开发。共同稳定点,将业务代码与非业务代码连接到一起

    理解AOP

    1、AOP (Aspect Oriented Programming)为什么叫面向切面编程?
    抽象的维度 ,我们抽象类的时候,是找到几个相似的类的共同点,将共同的部分放在父类中。通过继承的关系来实现复用。是一种垂直的抽象关系。AOP 是一种水平的抽象关系,把不同类的相同功能点抽象处理。不同类如果在使用继承来描述,明显显得不合适。切面 :就是通过横切的方式把功能切分,比如 一个转账,一个登陆。这是相关完全不相关的功能。没有任何共同点,如果我们把 转账这个功能切分一下,转账-记录日志,登陆-记录日志。这样就出现了相同的部分,记录日志。所以AOP 描述的是一种编程思想。与实现方式无关,当然我们也可以把这种思维利用抽象分析过程中。看待一个事物应该有多重维度。从不同维度找出共同的地方。

    2、AOP实现
    如何将业务代码与非业务代码组合到一起。使用代理模式,将对目标对象的访问权限 封装到 代理对象中,只能通过代理对象 访问到目标对象。client —> bussisSerivceProxy —>bussisSerivce。java 语言的实现,动态代理, 修改字节码的生成方式。JDK 动态代理 ,gclib 等等。aop 与代理的区别,AOP 是一种抽象思想,代理是一种实现AOP 的方式。源码中常常有AopProxy 这样的类,说明AOP 是用代理来实现的。

    Spring 专题

    相关文章

      网友评论

        本文标题:Spring | 简介(上)

        本文链接:https://www.haomeiwen.com/subject/tqbunhtx.html