一、前言

在学习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. DataPipeline CTO陈肃:构建批流一体数据融合平台的一致性语义保证

    文 | 陈肃 DataPipelineCTO 交流微信 | datapipeline2018 本文完整PPT获取 | 关注公众号后,后台回复“陈肃” 首先,本文将从数据融合角度,谈一下DataPipe ...

  2. SpringBoot+Security+MyBatis+ES+MQ+Redis+Docker+Vue的电商系统

    今天鹏哥给大家推荐的项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现. 前台商城系统包含首页门户.商品推荐.商品搜索.商品展示.购物车.订单流程.会员中 ...

  3. SparkStreaming之checkpoint检查点

    一.简介 流应用程序必须保证7*24全天候运行,因此必须能够适应与程序逻辑无关的故障[例如:系统故障.JVM崩溃等].为了实现这一点,SparkStreaming需要将足够的信息保存到容错存储系统中, ...

  4. 在 Vim 中,删除 ^@ 符号的几种方法

    在 Vim 中,^@ 表示 ASCII 码中的 NULL 字符,编码为 0x00,占用一个字节. 删除方法 方法1,采用 <CTRL-V><CTRL-J> 或 <CTRL ...

  5. idea操作maven时控制台中文显示乱码/maven项目启动方式

    在idea中通过maven启动项目时,在前台显示数据库信息,没有中文乱码问题,在控制台中mybatis显示数据库的信息,中文显示乱码. 在程序中用 System.out.println 输出中文的时候 ...

  6. Django简介,请求生命周期,静态文件配置

    Web框架 ​ Web框架(Web framework)是一种开发框架,用来支持动态网站.网络应用和网络服务的开发.这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方 ...

  7. k8s运维处理

    k8s运维处理 驱逐节点容器,进行docker,等重要组件的重启时,打驱逐标记 kubectl drain [option --node ip] 进行重启docker或kubelet等其他操作,操作完 ...

  8. Codeforces A. Kyoya and Colored Balls(分步组合)

    题目描述: Kyoya and Colored Balls time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  9. 检测一个js写的URL拼接函数

    有时,我看代码不太理解时,直接调用函数进行输出,是很一个不错的习惯. 今天遇到的调试的结果如下. <script> const U = function (opt, url) { var ...

  10. 第七篇 -- XmlReader 和 XmlWriter

    XmlReader用于读取Xml文件,XmlWriter用于将数据写到Xml文件.其实,在印象当中,XML很多的操作类都支持直接Save.Read也支持接受XmlReader与XmlWriter类的示 ...