最近在学习Java体系的一些框架,先把SSM先学一遍吧,不得不说经典的Java体系带给我的冲击还是比较大的,这里不记录框架的一些实现细节,那些都记录在笔记里面了,这里记录学习 Spring 体系的一些核心思想和思维吧。

SpringFramework

SpringFramework主要是两个最重要的编程思想:

  • IoC 控制反转

  • AOP 面向切面编程

先说这些编程思想的出现要解决的问题:解耦

将我们庞大的工程分层,让每一层专注于解决自己的问题,这也是软件工程思想架构的思维,非常非常重要。

IoC

这是最重要的思想,完全颠覆了Java开发的思想。

简单来说,就是使用一个容器来完成对所有bean对象的管理。

这里使用了工厂模式的设计思维。

将我们需要使用到的bean对象都交给Spring框架来管理,我们对于Bean对象的获取,注入等操作都借助框架,通过 Dependency Injection 依赖注入来注入到每个需要的对象中。

我们通过 XML 或者 注解的方式能够很简单的获取我们所需要的对象,Spring框架会为我们注入到每个需要的对象中。

理解IoC最好的方式还是我们可以自己简单的实现一个 IoC 的框架,从而能够理解 IoC。

AOP

这是一种编程思维,而不是仅仅针对Java或Spring的框架。

AOP的出现让每一层能够专注于实现自己的功能,而那些通用的、贯穿整个开发的内容:例如日志、事务安全等可以使用专门的一层来实现,而不必将整个业务层的代码变得冗余繁杂。

在 Java 体系中,我们主要是通过动态代理来进行 AOP 的实现。

为什么动态代理这么强大?这是因为我们通过反射,在运行中创建对象。

这是因为 Java中,动态代理字节码随用随创建,随用随加载,从而在不修改源码的基础上对方法增强。

主要有两种方式:

  • 通过原生的 Proxy 类来生成代理对象从而完成通用的任务

  • 通过 cglib 的 Enhancer 来实现代理对象从而完成动态代理

理解 AOP 最好的方式还是我们可以自己简单的实现一个 AOP 的框架,从而能够理解 AOP。

Spring学习的一点感想的更多相关文章

  1. Unity3D 新人学习的一点感想

    想到那里写到那里吧 1.Unity3D的优点大家都知道:组件化.c#语言.可见即所得. 当初刚开始学习的是cocos2dx,c++的货,觉得还是写的不错的,也是国人开发的,真的代码很容易懂,直接看引擎 ...

  2. 学习javascript 的一点感想

    原文:学习javascript 的一点感想 //动态性是指,在一个Javascript对象中,要为一个属性赋值,我们不必事先创建一个字段,只需要在使用的时候做赋值操作即可,如下例:var obj=ne ...

  3. Spring学习之Ioc控制反转(1)

    开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...

  4. 我的Spring学习记录(四)

    虽然Spring管理这我们的Bean很方便,但是,我们需要使用xml配置大量的Bean信息,告诉Spring我们要干嘛,这还是挺烦的,毕竟当我们的Bean随之增多的话,xml的各种配置会让人很头疼. ...

  5. Spring学习(六)-----Spring使用@Autowired注解自动装配

    Spring使用@Autowired注解自动装配 在上一篇 Spring学习(三)-----Spring自动装配Beans示例中,它会匹配当前Spring容器任何bean的属性自动装配.在大多数情况下 ...

  6. Spring学习笔记第一篇——初识Spring

    1.简单介绍 spring的ioc底层是先配置xml文件,接着创建工厂,利用dom4j解析配置文件,最后通过反射完成.大概步骤差不多这样,这些具体代码spring帮你完成了.现在我们只需要配置xml和 ...

  7. spring 学习之 bean 的注入方式 property和constructor-arg的使用方式

    spring 学习之 bean 的注入方式 property和constructor-arg的使用方式. bean的注入方式: property 注入是: 通过setxx方法注入. construct ...

  8. Spring学习之AOP总结帖

    AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对组件(比如类)进行开发,然后对组件进行组 ...

  9. Spring学习之第一个AOP程序

    IOC和AOP是Spring的两大基石,AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对 ...

随机推荐

  1. mongodb安装及安装MongoDB报错Verify that you have sufficient privileges to start system services解决方法

    1.点击安装包mongodb-win32-x86_64-2012plus-4.2.2-signed进行安装 2.点击next 3.接受协议,点击next 4.点击自定义安装 选择安装路径,建议默认C盘 ...

  2. Tangram: Optimized Coarse-Grained Dataflow for Scalable NN Accelerators 阅读笔记

    目录 Tangram: Optimized Coarse-Grained Dataflow for Scalable NN Accelerators 1.Abstract 2.Introduction ...

  3. React useEffect的源码解读

    前言 对源码的解读有利于搞清楚Hooks到底做了什么,如果您觉得useEffect很"魔法",这篇文章也许对您有些帮助. 本篇博客篇幅有限,只看useEffect,力求简单明了,带 ...

  4. JWT(二):使用 Java 实现 JWT

    JWT(一):认识 JSON WebToken JWT(二):使用 Java 实现 JWT 介绍 原理在上篇<JWT(一):认识 JSON Web Token>已经说过了,实现起来并不难, ...

  5. GDAL集成GEOS

    因为要用到缓冲区分析,在使用Buffer的时候提示:ERROR 6: GEOS support not enabled,查了一下资料需要集成GEOS库.因为GDLA默认编译是没有集成GEOS库的. 现 ...

  6. Arrays.sort() VS Arrays.parallelSort()

    英文原文地址:Arrays.sort vs Arrays.parallelSort 作者:baeldung 翻译:高行行 1. 概述 我们都使用过 Arrays.sort() 对对象或原始数据类型数组 ...

  7. C++Primer第五版 6.1节练习

    练习6.1:实参和形参的区别是什么? 通俗解释: 实参是形参的初始值.编译器能以任意可行的顺序对实参求值.实参的类型必须与对应的形参类型匹配. 详解1) 形参变量只有在函数被调用时才会分配内存,调用结 ...

  8. Ndarry对象

    创建一个 ndarray 只需调用 NumPy 的 array 函数即可: numpy.array(object, dtype = None, copy = True, order = None, s ...

  9. Windows安装Python环境和Python集成开发环境(IDE)PyCharm

    1.Windows中安装Python 3 (1)打开浏览器,访问Python官网(https://www.python.org/) (2)光标移动至Downloads,单机Windows链接 (3)根 ...

  10. 实验一:通过Access划分vlan

    1.配置图 Switch0的fa0/1.fa0/2.fa0/3端口设置为Access模式,PC1和PC2属于vlan 2,PC3属于vlan 3. 2.Switch0配置 3.实验现象 PC1可以pi ...