您的位置:首页 > 编程语言 > Java开发

SpringMvc+Mybatis实现一个简单人事管理系统(三)

2017-08-25 09:39 609 查看

这篇文章文章主要写的是总结这两个月来学习SpringMvc的心得体会。

    

    一.大学经历

       
4000
在来实习之前,我只是个什么框架都不会,只会写个简单demo的小白,在学校里,老师也只是学些编程语言(C方向)的皮毛,比如语法结构或者一些概念(接口,反射等),并不知道该如何在项目中用到这些。在所学的课程中,学的比较好的就一个数据结构,还是因为老师抓得严,只能算是被迫学习。大二上,我参加了系里组织的android培训班,因为andorid是用java写的,我们专业是不学java语言,所以在开班之前,我简单了解了一下java语法等。虽然那段时间我没学到什么东西,只跟着老师做了个简单的demo,但这是我第一次接触到了编程,感觉敲代码也是挺有意思的。在那之后,我发现,我自己对网站开发很感兴趣,因为小时候玩电脑,最喜欢的就是去逛游戏论坛,看那些游戏攻略,感觉特别酷,希望长大后能有个自己的网站,里面想写啥就写啥。所以,我问了班导,他刚好也是做网站开发的,用C#开发,我本来在那时候也打算准备跟他一起做项目的,后来因为一些个人事情,这事情就不了了之了。但课余时间,我也自学了html,css,js等前端知识,能模仿着网页大概做出个静态demo。之后的大三上,专业课多了起来,但都是跟通信有关的,我个人不是很喜欢,感觉很枯燥。再加上还要带新生班委,社团联谊等活动,编程这方面就暂时停止了。大三下,我开始对今后职业规划做出选择,思来想去,还是更倾向于做一个程序员。于是,我又重新开始了学习编程之路。

    二.公司实习

       来到公司实习,我是既紧张又兴奋,紧张的是自己啥也不会,兴奋的是可以体验程序员的日常了。公司有分配台式电脑,我的电脑不知道为啥,装上win10系统后,每过个十来分钟就自动重启,上网搜了很多方法,改系统配置,换专业版,都不行。没办法,只能用自己的笔记本了。公司用的是IDE是idea,我之前也只是听说过,没具体用过,之前写的java用的是eslipse。开始配环境,好多工具我都没用过,我结合wiki以及上网搜了攻略,才勉强配置完。

  语言工具环境大功告成,开始配置spirng环境,这应该是我最纠结的部分。我傻傻的以为要把spring jar包挨个下载然后导入到项目中去,我觉得这个太麻烦繁琐了,而且网上教程五花八门。我问了同事才知道,可以用maven快速配置spring环境。那时候配置maven环境我还觉得,这个项目管理工具我应该暂时用不上,没想到马上就能用了。同事只是给了我一个方向,具体的我还得上网搜教程。一通折磨,终于用maven把spring需要的jar包弄好,而且非常方便,不禁感叹,maven真是个神器。所以在后来要用到的jar包,比如aop,mybatis等,我都直接通过maven直接导入。配置完了jar包,开始配web.xml,spring配置文件,这些在前文都有提到过,不在细说。总之,一句话,天赋不够,踩坑来凑。

  当可以通过controller访问到jsp页面时,最简单的springmvc项目算是搭建完成了,我开始看书,琢磨那些抽象概念,比如ioc,aop等。先说说ioc吧,这是spring的核心。一开始看书本,我觉得很抽象,ioc——控制反转,或者叫依赖注入,理解上去就很抽象。可当踩得坑多了,我慢慢理解了,spring其实就是个大容器,ioc我个人理解就是所有的类及其方法都在这里面进行注册,所谓的注册,就是在ioc里面根据配置文件或注解,为这些bean实例化,从而让开发者可以不需要实例化即可调用这些bean。为了方便理解,我把这个过程类比于淘宝购物,买家和卖家(bean)都需要在淘宝网进行注册bean,淘宝网作为第三方中间(ioc),为买家和卖家都进行注册,此时若买家想要买东西时,他把购物需求告诉淘宝网(ioc),淘宝网会在系统内自动匹配相关卖家(符合条件的bean),然后返回给买家相应卖家及其相关商品,买家不需要知道卖家的太多信息即可购物,非常方便。

  当我理解到这个层次的时候,我觉得ioc不应该再叫控制反转了,这个非常抽象,依赖注入明显更好接受。在看到后面的spring内容时,我会经常回过来在仔细看ioc那一节,重新思考ioc,我越发觉得,我并没有真正理解ioc,不然我也就不会一直反复会看了。我感觉可能书本上的定义和解释不能很好带给我新的启发,于是我上网搜了很多ioc相关的博客,让我对ioc有了新的理解,ioc的控制反转可以这么理解:spring把原先应该属于对象自己管理的控制权移到了spring容器中,实现了一个反转。一通百通,这个key让我想通了之前书本上提到的代码解耦问题以及java类反射机制。

  先说说代码解耦问题,我发现,springmvc框架中,对各组件的功能有着明确的划分,尤其是在我写人事管理系统的过程中,越发觉得,springmvc对这个问题处理的很好。代码解耦的核心就是依赖注入,它使得各对象间的耦合度变得低了,各对象间关联度也小了很多,它体现在代码块中,只需通过注解即可调用你想要的bean类,无需了解被引用bean调用情况,直接用它实现逻辑功能即可,大大方便了开发者效率。

  再说说java类反射机制吧,我之前也只是听说过java反射,发现spring的依赖注入就是用这个机制实现的,反射机制最大作用就是就是动态编译即运行时编译,通过反射,我们可以在运行时获取类的属性和方法,从而对他进行编辑。在spring中配置文件中,通过对<bean></bean>标签进行设置,此时在spring内部,已经通过class.forName()进行反射,为该bean进行注入。

  之前在看书本上的aop时,我一知半解,不知道具体体现在何处。因为书上的案例也都给的很简单,就是在三个方法里加一个切点,然后在切入点引入所需要的函数(功能),当我用到spring事物管理时,我才真正体会到aop的妙处。具体代码如下:

   @Transactional(readOnly=true)

   @Override

   public User findUserById(Integer id) {

       return userDao.selectById(id);

    }

    

  注解@Transcational就是使用了spring的aop,我个人理解就是注解就是一个切点,通过这个切点,把事务管理事件直接添加到findUserById方法中,非常灵活。不单单是@Transcational注解,spirng的注解都使用了aop思想,大大提高了开发者的编程效率,也使得代码看上去整洁易懂。

  Spirng 运用Aop技术降低了代码的耦合度,使得Spring上手非常容易,不仅如此,aop内部也使用了代理模式,大大降低了代码间的耦合度,极大提高了代码的维护性。我随着慢慢深入的了解,我越发觉得,spring原来有那么多有意思的地方。在这过程中,我也学到了很多,对于之前的很模糊的东西,比如动态代理,通过spirng的实例,让我真正明白了其中的优点和好处。

  说完了spring框架,我再说说我写项目结构时的收获吧。

  在写人事管理系统时,我发现spirng项目各个文件夹功能划分的很细,举我的例子来说,在java文件包中就有do,vo,dao,service,intercepter,controller,util等文件夹,虽然这是人为划分的,也不是只有spring才有,但我之前都没有真正了解过这些,所以这些东西对我来说都是全新的,我发现,虽然这样很麻烦,比如vo,do本质上都是pojo,里面都是各种属性的set/get方法,为什么还要划分成两个呢?我觉得主要还是维护性的考虑,因为这两者用途不同,do的各个属性对应于数据库中的各字段,他是连接数据库与dao组件的桥梁,而vo是业务层与展示层(view)的纽带。把这二者区分,放到不同文件夹里,能在开发过程中出现bug,日后维护升级需要时快速知道问题在哪,否则若大型项目,所有不同功能的pojo放到同一个文件夹中,日后维护起来非常麻烦和头疼。

  我在service层中写了个接口,里面声明和注释了所有的逻辑方法,然后在里面写个类继承该接口,实现具体的逻辑方法,我在敲的时候一直觉得接口写出来是多余的,这个接口感觉可有可无,只要实现类即可。后来在敲controller层过程中,我发现我之前那个想法太天真也太可笑了。因为controller是用逻辑层里的方法实现具体业务的,如果你没有那个接口列表,你想调用某个逻辑方法时,只能看service层中的逻辑方法实现类,那是非常可怕的一件事,因为代码量太大了,而接口因为规范了所有逻辑方法,当你想使用这个这些逻辑方法时,直接看接口就行,他就好像说明书,可以让开发者快速上手。我也想到,若日后项目维护,他人通过看接口说明,也能迅速明白这个方法用途,若需要修改,可以更高效维护。

  还有就是这么多不同功能的文件夹很好实现了解耦和封装性,提高了项目的可读性,这不仅仅是给他人的可读性,还有自己的可读性,因为我以前写的一些网页前端项目,过了一点时间,我根本看不懂我在写什么,虽然我都有写注释,但因为各种文件都放在一个文件夹中,显得很乱,如果出现问题,很难快速找到问题所在。我觉得,一个好的项目,不仅在文件中有一些必要的注释,在文件之间也应该有明确的分层和逻辑性,符合大家都能接受的规范。

  我知道,我现在学到的只是冰山一角,只是知道了一个spring项目该有的结构和spring的核心思想,还有很多高级功能等着我去探索。我会继续努力的!

     

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc