一、前言

在学习Spring的过程中,我们学习了很多东西,可是实际应用中,我们究竟用到了那些?常用的又是那种方法呢?

二、书上与开发的差异

1、IOC

1)

IOC,控制反转,是Spring框架的核心,是一种设计思想(不是技术),可以说,IOC贯穿Spring的整个框架,整个Spring是建立在IOC的基础上。原本我们创建对象就是直接在方法中把对象new出来,通过Spring,我们将大多数的对象交由Spring容器管理,当我们需要的时候,我们再依赖Spring容器注入(ID,依赖注入)[1]

IOC在实际中,有三个时候是比较重要,第一是学习的时候,第二是架构师写框架的时候,第三是我们面试的时候。

那开发呢?IOC是什么并不重要,IOC思想的辩证关系我们也不需要知道,毕竟我们是Java开发工程师,不是哲学家。在开发的时候,我们需要知道的是我们怎么去用好IOC思想指导下诞生的工具就行。

2)

在学习的过程中,我们必须学习XML文件中写下<bean></bean>的方式来实现IOC,那是必须的,因为Spring框架就是从这样发展而来。这样子会有个问题,假设有个中小型项目,大概在50张表左右,那么该有50个实体对象,还有Dao对象、Service对象和Controller对象,都已经150个了,还有一些配置信息,整个XML文件就会很长。再大型一点的项目上百张表,整个XML就会非常凌乱。就算拆分配置文件,修改的时候也会很麻烦。

后来Spring提供了注解的方法,替代了<bean></bean>。只需要在类上面,加上注解。[2]

注入的时候,我们可以通过@Resource或者@Autowired来注入。两个注解的区别在于,@Resource是Java自带的,通过名称进行匹配,默认第一个字母小写,如果名称写错了就呵呵呵了。而@Autowired是Spring的注解,通过类型进行匹配,遇上名字比较长的类就可以缩写了,当然一般来说还是默认第一字母小写。

2、AOP和拦截器[3]

我们学习的时候需要了解到AOP和拦截器,但实际上,这两个功能都是开发经理或者架构师在搭建项目的时候用到的,一旦搭建完毕,后续过程中极少修改,一般的程序员是极少用上。

3、面向接口编程

       Spring IOC和倡导的面向接口编程都是解耦思想的不同表现。[4]

而实际上,我们开发的过程中,会出现的情况可不是如书上那么理想: [5]

1)没写注释。下面的图是我自己的学习框架的代码,没有写任何注释。开发过程中很多人这样干的。

2)代码量大。每家公司都有自己的框架和编程规范,一般来说,业务代码达到几百行是常见的规模,至于每家公司是怎么拆分代码,每家公司都是不一样的。但是无论怎么封装拆分,总会有些方法比较臃肿,达到上百行。

3)废除接口,直接用实现类。理由很简单,少敲代码。如果修改方法的参数、名字的时候,需要修改多出地方,连接口也要修改就比较麻烦。

对于中小型项目,我是觉得第三点废除接口比较理想,有利于编码效率。而对于比较大型的项目,还是需要建立接口,一般这样的项目,一个类中,代码可以达到几千行,有接口统一定义,统一管理,有利于协调各部分代码之间的联系,方便开发。需不需要面向接口,要看情况看项目,不能根据书上一概而论。

三、Spring的未来:Hello,SpringBoot[6]

当下,Spring作为最流行的框架之一被许多项目使用着,但我们也同时发现了问题,我们的配置文件非常庞大,需要什么功能就要往上加,需要兼用什么组件也往上加,显得臃肿。在这个背景下,Spring团队开发了SpringBoot框架(SB),SB不单止简化了配置,还将服务器包含在框架内。SB源于Spring,却优于Spring。目前一些比较好的公司在校招的时候已经明确要求会SB框架。

四、后言

看到这里,有人会疑问,这就完了?没错,这就完了,日常就是这样使用,只有直接没有XML文件。本文旨在总结阐述编程哲学与实际开发中遇到的各种问题,没有讨论编程哲学,没有讨论辩证关系,只有实践、实用。文中难免有错漏之处,希望各位不吝赐教,加以指正。

Reference:

[1] Acrash, 谈谈对Spring IOC的理解, https://blog.csdn.net/qq_22654611/article/details/52606960

[2] 依木前行, spring的@compont和@service以及@controller,@repository区别, https://blog.csdn.net/two_people/article/details/52180758

[3] 独具匠心, Spring AOP详解, https://www.cnblogs.com/hongwz/p/5764917.html

[4] JJ_nan, 面向接口编程的优点, https://blog.csdn.net/jj_nan/article/details/70161086

[5] 代码如此多娇, 面向接口编程,接口是什么,有什么作用?, https://www.cnblogs.com/lovelycode/articles/6887958.html

[6] _江南一点雨, 初识Spring Boot框架, https://blog.csdn.net/u012702547/article/details/53740047

从编程哲学到开发应用:Spring的初步应用的更多相关文章

  1. 六、Spring之初步认识AOP

    Spring之初步认识AOP [1]AOP概览 什么是AOP?(来自百度) ​ 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行 ...

  2. Python黑帽编程2.1 Python编程哲学

    Python黑帽编程2.1  Python编程哲学 本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言.我带大家膜拜下Python作者的Python之禅,然后再来了解下P ...

  3. 编程哲学之C#篇:02——学习思维

    <代码大全>的第二章:介绍隐喻(类比)的思维方式, <经济学原理>的第二章:介绍怎么像经济学家一样思考, <计算机的心智操作系统之哲学原理>的第一章:介绍学习操作系 ...

  4. 编程哲学之C#篇:01——创世纪

    我们能否像神一样地创建一个世界? 对于创建世界而言,程序员的创作能力最接近于神--相对于导演,作家,漫画家而言,他们创建的世界(作品)一旦完成,就再也不会变化,创建的角色再也不会成长.而程序员创建的世 ...

  5. 编程哲学之 C# 篇:007——如何创造万物

    上帝拥有创建万物的能力,本文介绍创造万物的道,让你也拥有上帝般创造万物的能力! 道 中国哲学家,道家学派创始人--老子,在<道德经>写到: 道生一,一生二,二生三,三生万物 那么,是什么 ...

  6. Spring AOP初步总结(一)

    学习AOP有段时间了,一直没空总结一下,导致有些知识点都遗忘了,之后会把以前学过的Spring核心相关的知识点总结一轮... 先大体介绍下Spring AOP的特点(均摘自"Spring i ...

  7. Spring Data初步--整合Hibernate

    Spring Data课程中的技术介绍 Hibernate: Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,它将 pojo 与数据库表建立映射关系 ...

  8. Spring源码窥探之:Spring AOP初步使用

    AOP即面向切面编程.它的底层实际是用了spring的动态代理,具体是JDK的代理还是CGLIB的代理,就视情况而定了.本博客园仅仅作为平时记录,显得有些杂乱无章,如果想了解动态代理,设计模式,请访问 ...

  9. Spring源码窥探之:Spring AOP初步

    AOP(Aspect Oriented Programming):即我们常说的面向切面编程. 什么是AOP?AOP是在我们原来写的代码的基础上,进行一定的包装,比如在方法执行前.方法返回后.方法抛出异 ...

随机推荐

  1. [Tools] 多媒体视频处理工具FFmpeg

    FFMpeg FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/ ...

  2. JAVA - Windows下JDK自动设置脚本

    CMD窗口如果使用下面脚本代码出现乱码,则按照下文处理后,就可以了: https://www.cnblogs.com/sunylat/p/11308037.html @echo off echo ** ...

  3. Spring 开发之组件赋值

    1. @Value & @PropertySource 1.1 使用方式 @PropertySource:读取外部配置文件中的 k/v 保存到运行的环境变量中;加载完外部的配置文件以后使用 $ ...

  4. FreeRTOS 任务通知

    可以替代队列.二值信号量.计数型信号量和事件标志组 发送任务通知 获取任务通知 FreeRTOS 任务通知模拟二值信号量 FreeRTOS 任务通知模拟计数型信号量 FreeRTOS 任务通知模拟消息 ...

  5. PHP在线批量下载文件

    在项目开发中需要给客户提供在线下载文件的功能. 解决方案:使用PHP自带的ZipArchive类,将多个文件打包成zip文件,供客户下载! 使用ZipArchive类时,需要先开启php_zip扩展, ...

  6. 025:为什么需要将Logger对象声明为private static final类型的

    本文阅读时间大约4分钟. 参考答案 就这个问题而言,我总结了三个原因: 设置为private是为了防止其他类使用当前类的日志对象: 设置为static是为了让每个类中的日志对象只生成一份,日志对象是属 ...

  7. springboot如何读取配置文件中的参数(例如:application-consts.properties) 又结合maven读取配置文件的顺序

    1.启动项目后,会读取pom.xml中的配置文件,例如现在读取的是本地配置 2.找到对应的配置文件  会读取uri地址下的配置.注:如果为springboot启动无需加config项目的名称,应该本身 ...

  8. set_lb

    修改lb权重,通知钉钉 前提需要安装阿里的核心库 #!/usr/local/python-3.6.4/bin/python3 #coding=utf-8 from aliyunsdkcore.clie ...

  9. APP开发基础知识(转载)

    来源:https://www.cnblogs.com/wangsea/p/9413672.html 本文针对小白用户对App做一个简单的介绍,首先要了解App都有哪些类型,不同的类型适用于哪些需求,用 ...

  10. MySQL 5.7数据库参数优化

    连接相关参数 max_connections:允许客户端并发连接的最大数量,默认值是151,一般将该参数设置为500-2000max_connect_errors:如果客户端尝试连接的错误数量超过这个 ...