一、前言

在学习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. 查看mysql字符集、修改数据库、数据表、字段字符集

    查看所有表的字符集 SELECT table_name, table_type, engine, version, table_collation FROM information_schema.ta ...

  2. Nginx深入详解之upstream分配方式

    一.分配方式 Nginx的upstream支持5种分配方式,下面将会详细介绍,其中,前三种为Nginx原生支持的分配方式,后两种为第三方支持的分配方式: 1.轮询 轮询是upstream的默认分配方式 ...

  3. vue生成pdf

    主要参考 https://blog.csdn.net/qq_37880968/article/details/94626001 1.添加模块 npm install --save html2canva ...

  4. QT制作一个位图画图板程序

    本文学习如何创建一个Qt绘制程序,用户将能够通过使用不同的尺寸和画笔的颜色来表达他们的创造力. 主要功能:保存画板内容为图片.清除画板内容.设置画板大小.设置画笔颜色 新建基于QMainWindow的 ...

  5. 【 Android 】ViewPager + TabLayout + Fragment 数据初始化问题

    在 ViewPager 和 Fragment 配合使用的时候,ViewPager 会使用预加载机制,使得我们在没有切换到到对应页面时,就已经加载好了,这是个非常不好的用户体验. 所以本示例项目就诞生了 ...

  6. MySQL导入数据报错Got a packet bigger than‘max_allowed_packet’bytes错误的解决方法

    由于max_allowed_packet的值设置过小的原因,只需要将max_allowed_packet值设置大一点就OK了.通过终端进入mysql控制台,输入如下命令可以查看max_allowed_ ...

  7. Jvm调优积累的文章

    Linux查看CPU和内存使用情况 stat命令查看jvm的GC情况 (以Linux为例) jvm优化必知系列——监控工具 Java JVM 参数设置大全

  8. kubernetes网络之Flannel

    简介 Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址. 在默认的Dock ...

  9. Laravel实现用户的注册、登录

    一.安装 Laravel(使用 Laravel5.5) 通过 Composer 创建项目 composer create-project --prefer-dist laravel/laravel s ...

  10. ubuntu18.04使用kubeadm部署k8s单节点

    实验目的: 体验kubeadm部署k8s服务,全流程体验! 实验环境: ubuntu18.04 联网在线部署 kubeadm 01.系统检查 节点主机名唯一,建议写入/etc/hosts 禁止swap ...