Spring学习总结

关于Spring也大体了解了一下,其原理比较简单,不过思想却是比较复杂,什么IOC,什么DI,什么AOP……

不过这个这些个东西好在以前都有所接触,倒也不觉得头大。

Spring的原理不过就是反射+注入,这样可以让你定义一个接口而不用每次调用接口都固定该接口的实现,而是通过spring帮你把该接口的实现通过配置文件注入进来。那么这就引出来一个问题,它是什么时候帮你把接口的实现注入进来的?

这个要涉及到两方面,一个是非web形式的,另一种是web形式的。

对于非web形式的spring的使用,你在调用含有接口的类的时候你需要先使用spring的BeanFactory和ClassPathXmlApplicationContext来将接口的实现注入。

对于web形式,你需要在web.xml中配置spring的ContextLoaderListener这个监听器,另外也需要配置contextConfigLocation(也就是你的配置文件的路径)。这样在你的tomcat启动时,它就会自动找到你的beans.xml文件,把其中的xml配置或者是spring的注解的内容加载的spring的容器中,注入到你定义接口的类中(其实就是通过反射调用那个类中的set接口的方法)

关于IOC和DI其实是一回事,IOC是控制翻转的意思,控制翻转很好理解,就是本来A应该控制B,但是却是B控制A。(个人理解,不知是否确切,其实用模板方法就可以说明)。而又有某专家称把IOC改为ID更加形象,DI也就是“依赖注入”的意思,也就是实现你不需要确定好依赖(创建需要的实例对象),而是用容器动态的确定依赖关系(你需要某个实例了就告诉容器,容器帮你确定你需要哪个实例)

再说AOP的概念,Aspect Oriented Programming的缩写,意思是面向切面编程。按照我自己的理解其实就是“不负责任”编程。

面向切面编程解决很多问题,其中最基本的就是使得编程不在拘泥于固定的流程。一个简单的例子就是:

你写一个类A,A里面有方法调用B的add方法,B里面又调用C的save方法,这是一个很简单的逻辑,程序按照A——B.add——C.save.执行,这样如果你需要处理事务的话你需要在B.add里面写上事务处理代码,如果仅此一条线也没什么,如果你的项目里面业务量相当大那该怎么办,每一个都写相同的事务处理代码?显然是浪费时间的。

由此引入AOP的概念,还是原来的程序,还是原来的流程,我只需要写一个单独的切面类(xxxInterceptor),写明是对哪个类进行“切割”,然后通过spring设置。这样你程序在执行的时候你的逻辑上是按照原先的A——B.add——C.save。而实际的执行流程已经改变了。

用一个图来形象的表明就是:

通过这个AOP之后,你就可以不用对你要处理的事务或者是日志负责了,因为有人帮你做了。

关于AOP中还有一些概念还是不太清楚。

IOC和AOP基本上就是spring的核心了,spring单独使用起来还是比较简单的。不过当使用spring对hibernate和struts进行整合的时候就比较复杂了。不过现在觉得复杂是因为还没有了解到这个三个框架的真正内涵,也对这三个框架不太熟悉。

剩下的还是需要通过实践来获得真知呀。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 我的pythonIDE-vim插件分享

    从pycharm转到vim有一段时间了,觉得vim装上一些插件之后还是能满足当前需求的。

    the5fire
  • Python音频播客推荐:捕蛇者说

    关注我公众号比较久的人应该都看到过我经常会推一些好的播客内容,比较遗憾的是很多中文类的技术播客更新一段时间之后就停更了,或者间歇性停更或者永久「弃坑」。但不管怎...

    the5fire
  • 《Django企业开发实战》FAQ - 持续更新

    单纯的学习 Django 提供的功能的话,看文档就够了,前提是你英文阅读还行,不过很多「残卷」的中文翻译看起来也不太省时间。当然也有人把 Django 文档做了...

    the5fire
  • 小白学Python | 最简单的Django 简明教程

    ? 一、Django简介 1. web框架介绍 具体介绍Django之前,必须先介绍WEB框架等概念。 web框架: 别人已经设定好的一个web网站模板,你学...

    小小科
  • 小白学Python | 最简单的Django 简明教程

    web框架: 别人已经设定好的一个web网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子。

    小小科
  • 记录一次Hexo的崩溃修复

    这次崩溃的原因是安装主题的时候手贱终止了一次然后就出了问题,导致hexo的各种命令如clean、generate、server等一直报警告并且导致网页资源的渲染...

    impressionyang
  • SRE之道:创造软件系统来维护系统运行

    大家都知道, 计算机软件系统离开人通常是无法自主运行的。那么,究竟应该如何去运维一个日趋复杂的大型分布式计算系统呢?雇佣系统管理员(sysadmin)运维复杂的...

    博文视点Broadview
  • vim从入门到放弃-绝密版

    vim号称编辑器之神,很多人都经历了从入门到放弃的痛苦过程。如今使用vim已有10年,vim极高的提高了我的工作效率,而且在使用的过程中总能不经意间发现一些使用...

    致码DevOps
  • 什么是引力波?它是怎么被发现的?

    法拉第(见图4-1)认识到,遍布于整个空间的电磁场是电磁力的载体。这个观点改变了我们对物理世界的理解。

    华章科技
  • RCNN学习笔记(7):Faster R-CNN 英文论文翻译笔记

    reference link:http://blog.csdn.net/liumaolincycle/article/details/48804687

    用户1908973

扫码关注云+社区

领取腾讯云代金券