从编程哲学到开发应用:Spring的初步应用
一、前言
在学习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的初步应用的更多相关文章
- 六、Spring之初步认识AOP
Spring之初步认识AOP [1]AOP概览 什么是AOP?(来自百度) 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行 ...
- Python黑帽编程2.1 Python编程哲学
Python黑帽编程2.1 Python编程哲学 本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言.我带大家膜拜下Python作者的Python之禅,然后再来了解下P ...
- 编程哲学之C#篇:02——学习思维
<代码大全>的第二章:介绍隐喻(类比)的思维方式, <经济学原理>的第二章:介绍怎么像经济学家一样思考, <计算机的心智操作系统之哲学原理>的第一章:介绍学习操作系 ...
- 编程哲学之C#篇:01——创世纪
我们能否像神一样地创建一个世界? 对于创建世界而言,程序员的创作能力最接近于神--相对于导演,作家,漫画家而言,他们创建的世界(作品)一旦完成,就再也不会变化,创建的角色再也不会成长.而程序员创建的世 ...
- 编程哲学之 C# 篇:007——如何创造万物
上帝拥有创建万物的能力,本文介绍创造万物的道,让你也拥有上帝般创造万物的能力! 道 中国哲学家,道家学派创始人--老子,在<道德经>写到: 道生一,一生二,二生三,三生万物 那么,是什么 ...
- Spring AOP初步总结(一)
学习AOP有段时间了,一直没空总结一下,导致有些知识点都遗忘了,之后会把以前学过的Spring核心相关的知识点总结一轮... 先大体介绍下Spring AOP的特点(均摘自"Spring i ...
- Spring Data初步--整合Hibernate
Spring Data课程中的技术介绍 Hibernate: Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,它将 pojo 与数据库表建立映射关系 ...
- Spring源码窥探之:Spring AOP初步使用
AOP即面向切面编程.它的底层实际是用了spring的动态代理,具体是JDK的代理还是CGLIB的代理,就视情况而定了.本博客园仅仅作为平时记录,显得有些杂乱无章,如果想了解动态代理,设计模式,请访问 ...
- Spring源码窥探之:Spring AOP初步
AOP(Aspect Oriented Programming):即我们常说的面向切面编程. 什么是AOP?AOP是在我们原来写的代码的基础上,进行一定的包装,比如在方法执行前.方法返回后.方法抛出异 ...
随机推荐
- python基础04day
一 引子 数据类型 用途 定义方式 是否多项 有/无序 可/不可变 对应状态 数字 否 —— 不可 字符串 “”‘’“““””” 否 有 不可 列表 [] 是 有 可 同 ...
- Springboot jpa多数据源
1.SpringBootApplication package com.xx.xxx; import org.springframework.beans.factory.annotation.Auto ...
- AI工程师基础知识100题
100道AI基础面试题 1.协方差和相关性有什么区别? 解析: 相关性是协方差的标准化格式.协方差本身很难做比较.例如:如果我们计算工资($)和年龄(岁)的协方差,因为这两个变量有不同的度量,所以我们 ...
- Java JDBC结果集的处理
结果集指针的移动 while (resultSet.next()){ //...... } 指针最初指向第一条记录之前,next()是指向下一个位置,返回的是boolean值,true表示有内容(记录 ...
- Nexus6p手机root和安装xposed
进行root前需要两个前提条件 解锁OEM 进入开发者选项:设置-〉关于-〉一直点版本号会出现,usb调试打开 手机连接pc命令行输入: adb reboot bootloader 进入bootloa ...
- PostgreSQL 基本数据类型及常用SQL 函数操作
数据类型 名字 别名 描述 bigint int8 有符号的8字节整数 bigserial serial8 自动增长的8字节整数 bit [ (n) ] 定长位串 bit varying [ (n ...
- C语言中指针和数组
C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵.但是程序员一般都有一种迷之 ...
- phpstorm webstorm编辑器正则替换 类名,方法名替换
首先勾选Match Case 和 Regex 正则规则:无须添加//左右分解符,直接写正则表达式,注意应该转义的部分,需要原封不动替换的部分加上括号 替换规则:正常书写正则,要继承下来的字符使用$1. ...
- Httpd服务入门知识-Httpd服务常见配置案例之显示服务器版本信息
Httpd服务入门知识-Httpd服务常见配置案例之显示服务器版本信息 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.httpd配置文件的组成 1>.主要组成 Globa ...
- gitlab上下载项目
第一步:下载安装git,在官网下载安装即可,没有账号的自己注册账号: 第二步:在左面空白处点击鼠标右键,点击Git Bash Here,出现对话框: 第三步:配置本地仓库的账号邮箱git: $ git ...