共计 4460 个字符,预计需要花费 12 分钟才能阅读完成。
该系列博文会通知你如何从 spring 根底动手,一步步地学习 spring 根底和 springmvc 的框架常识,并上手进行我的项目实战,spring 框架是每一个 Java 工程师必须要学习和了解的知识点,进一步来说,你还须要把握 spring 甚至是 springmvc 的源码以及实现原理,能力更残缺地理解整个 spring 技术体系,造成本人的常识框架。
后续还会有 springboot 和 springcloud 的技术专题,陆续为大家带来,敬请期待。
为了更好地总结和测验你的学习成绩,本系列文章也会提供局部知识点对应的面试题以及参考答案。
<!– more –>
在讲源码之前,先让咱们回顾一下一下 Spring 的基本概念,当然,在看源码之前你须要应用过 spring 或者 spirngmvc。
Spring 是什么
Spring 是一个开源的轻量级 Java SE(Java 规范版本)/Java EE(Java 企业版本)开发利用框架,其目标是用于简化企业级利用程序开发。应用程序是由一组相互协作的对象组成。而在传统利用程序开发中,一个残缺的利用是由一组相互协作的对象组成。所以开发一个利用除了要开发业务逻辑之外,最多的是关注如何使这些对象合作来实现所需性能,而且要低耦合、高内聚。
业务逻辑开发是不可避免的,那如果有个框架进去帮咱们来创建对象及治理这些对象之间的依赖关系。可能有人说了,比方“形象工厂、工厂办法设计模式”不也能够帮咱们创建对象,“生成器模式”帮咱们解决对象间的依赖关系,不也能实现这些性能吗?
可是这些又须要咱们创立另一些工厂类、生成器类,咱们又要而外治理这些类,减少了咱们的累赘,如果能有种通过配置形式来创建对象,治理对象之间依赖关系,咱们不须要通过工厂和生成器来创立及治理对象之间的依赖关系,这样咱们是不是缩小了许多工作,减速了开发,能节俭出很多工夫来干其余事。Spring 框架刚进去时次要就是来实现这个性能。
Spring 框架除了帮咱们治理对象及其依赖关系,还提供像通用日志记录、性能统计、安全控制、异样解决等面向切面的能力,还能帮我治理最头疼的数据库事务,自身提供了一套简略的 JDBC 拜访实现,提供与第三方数据拜访框架集成(如 Hibernate、JPA),与各种 Java EE 技术整合(如 Java Mail、任务调度等等),提供一套本人的 web 层框架 Spring MVC、而且还能非常简单的与第三方 web 框架集成。
从这里咱们能够认为 Spring 是一个超级粘合平台,除了本人提供性能外,还提供粘合其余技术和框架的能力,从而使咱们能够更自在的抉择到底应用什么技术进行开发。而且不论是 JAVA SE(C/ S 架构)应用程序还是 JAVA EE(B/ S 架构)应用程序都能够应用这个平台进行开发。让咱们来深刻看一下 Spring 到底能帮咱们做些什么?
Spring 能帮咱们做什么
Spring 除了不能帮咱们写业务逻辑,其余的简直什么都能帮忙咱们简化开发:
一、传统程序开发,创建对象及组装对象间依赖关系由咱们在程序外部进行管制,这样会加大各个对象间的耦合,如果咱们要批改对象间的依赖关系就必须批改源代码,从新编译、部署;而如果采纳 Spring,则由 Spring 依据配置文件来进行创立及组装对象间依赖关系,只须要改配置文件即可,无需从新编译。所以,Spring 能帮咱们依据配置文件创立及组装对象之间的依赖关系。
二、当咱们要进行一些日志记录、权限管制、性能统计等时,在传统应用程序当中咱们可能在须要的对象或办法中进行,而且比方权限管制、性能统计大部分是反复的,这样代码中就存在大量反复代码,即便有人说我把通用局部提取进去,那必然存在调用还是存在反复,像性能统计咱们可能只是在必要时才进行,在诊断结束后要删除这些代码;还有日志记录,比方记录一些办法拜访日志、数据拜访日志等等,这些都会渗透到各个要拜访办法中;
还有权限管制,必须在办法执行开始进行审核,想想这些是如许可怕而且是如许无聊的工作。如果采纳 Spring,这些日志记录、权限管制、性能统计从业务逻辑中分离出来,通过 Spring 反对的面向切面编程,在须要这些性能的中央动静增加这些性能,无需渗透到各个须要的办法或对象中;
有人可能说了,咱们能够应用“代理设计模式”或“包装器设计模式”,你能够应用这些,但还是须要通过编程形式来创立代理对象,还是要耦合这些代理对象,而采纳 Spring 面向切面编程能提供一种更好的形式来实现上述性能,个别通过配置形式,而且不须要在现有代码中增加任何额定代码,现有代码专一业务逻辑。
所以,Spring 面向切面编程能帮忙咱们无耦合的实现日志记录,性能统计,安全控制。
三、在传统应用程序当中,咱们如何来实现数据库事务管理?须要一系列“获取连贯,执行 SQL,提交或回滚事务,敞开连贯”,而且还要保障在最初肯定要敞开连贯,如许可怕的事件,而且也很无聊;如果采纳 Spring,咱们只需获取连贯,执行 SQL,其余的都交给 Spring 来治理了,简略吧。所以,Spring 能非常简单的帮咱们治理数据库事务。
四、Spring 还提供了与第三方数据拜访框架(如 Hibernate、JPA)无缝集成,而且本人也提供了一套 JDBC 拜访模板,来不便数据库拜访。
五、Spring 还提供与第三方 Web(如 Struts、JSF)框架无缝集成,而且本人也提供了一套 Spring MVC 框架,来不便 web 层搭建。
六、Spring 能不便的与 Java EE(如 Java Mail、任务调度)整合,与更多技术整合(比方缓存框架)。
Spring 能帮咱们做这么多事件,提供这么多功能和与那么多支流技术整合,而且是帮咱们做了开发中比拟头疼和艰难的事件,那可能有人会问,难道只有 Spring 这一个框架,没有其余抉择?当然有,比方 EJB 须要依赖应用服务器、开发效率低、在开发中小型我的项目是宰鸡拿牛刀,尽管倒退到当初 EJB 比拟好用了,但还是比拟轻便还须要依赖应用服务器等。那为何须要应用 Spring,而不是其余框架呢?让咱们接着往下看。
为何须要 Spring
一 首先论述几个概念
1、应用程序:是能实现咱们所须要性能的成品,比方购物网站、OA 零碎。
2、框架:是能实现肯定性能的半成品,比方咱们能够应用框架进行购物网站开发;框架做一部分性能,咱们本人做一部分性能,这样应用程序就创立进去了。而且框架规定了你在开发应用程序时的整体架构,提供了一些根底性能,还规定了类和对象的如何创立、如何合作等,从而简化咱们开发,让咱们专一于业务逻辑开发。
3、非侵入式设计:从框架角度能够这样了解,无需继承框架提供的类,这种设计就能够看作是非侵入式设计,如果继承了这些框架类,就是侵入设计,如果当前想更换框架之前写过的代码简直无奈重用,如果非侵入式设计则之前写过的代码依然能够持续应用。
4、轻量级及重量级:轻量级是绝对于重量级而言的,轻量级个别就是非入侵性的、所依赖的货色非常少、资源占用非常少、部署简略等等,其实就是比拟容易应用,而重量级正好相同。
5、POJO:POJO(Plain Old Java Objects)简略的 Java 对象,它能够蕴含业务逻辑或长久化逻辑,但不担当任何非凡角色且不继承或不实现任何其它 Java 框架的类或接口。
6、容器:在日常生活中容器就是一种盛放货色的用具,从程序设计角度看就是装对象的的对象,因为存在放入、拿出等操作,所以容器还要治理对象的生命周期。
7、管制反转:即 Inversion of Control,缩写为 IoC,管制反转还有一个名字叫做依赖注入(Dependency Injection),就是由容器控制程序之间的关系,而非传统实现中,由程序代码间接操控。
8、Bean:个别指容器治理对象,在 Spring 中指 Spring IoC 容器治理对象。
为什么须要 Spring 及 Spring 的长处
●十分轻量级的容器:以集中的、自动化的形式进行应用程序对象创立和拆卸,负责对象创立和拆卸,治理对象生命周期,能组合成简单的应用程序。Spring 容器是非侵入式的(不须要依赖任何 Spring 特定类),而且齐全采纳 POJOs 进行开发,使应用程序更容易测试、更容易治理。而且外围 JAR 包十分小,Spring3.0.5 不到 1M,而且不须要依赖任何应用服务器,能够部署在任何环境(Java SE 或 Java EE)。
●AOP:AOP 是 Aspect Oriented Programming 的缩写,意思是面向切面编程,提供从另一个角度来思考程序结构以欠缺面向对象编程(绝对于 OOP),即能够通过在编译期间、装载期间或运行期间实现在不批改源代码的状况下给程序动静增加性能的一种技术。艰深点说就是把可重用的性能提取进去,而后将这些通用性能在适合的时候织入到应用程序中;比方平安,日记记录,这些都是通用的性能,咱们能够把它们提取进去,而后在程序执行的适合中央织入这些代码并执行它们,从而实现须要的性能并复用了这些性能。
● 简略的数据库事务管理:在应用数据库的应用程序当中,本人治理数据库事务是一项很让人头疼的事,而且很容易呈现谬误,Spring 反对可插入的事务管理反对,而且无需 JEE 环境反对,通过 Spring 治理事务能够把咱们从事务管理中解放出来来专一业务逻辑。
●JDBC 形象及 ORM 框架反对:Spring 使 JDBC 更加容易应用;提供 DAO(数据拜访对象)反对,十分不便集成第三方 ORM 框架,比方 Hibernate 等;并且齐全反对 Spring 事务和应用 Spring 提供的统一的异样体系。
●灵便的 Web 层反对:Spring 自身提供一套十分弱小的 MVC 框架,而且能够非常容易的与第三方 MVC 框架集成,比方 Struts 等。
●简化各种技术集成:提供对 Java Mail、任务调度、JMX、JMS、JNDI、EJB、动静语言、近程拜访、Web Service 等的集成。
Spring 能帮忙咱们简化利用程序开发,帮忙咱们创立和组装对象,为咱们治理事务,简略的 MVC 框架,能够把 Spring 看作是一个超级粘合平台,能把很多技术整合在一起,造成一个整体,使系统结构更低劣、性能更出众,从而减速咱们程序开发,有如上长处,咱们没有理由不思考应用它。
如何学好 Spring
要学好 Spring,首先要明确 Spring 是个什么货色,能帮咱们做些什么事件,晓得了这些而后做个简略的例子,这样就根本晓得怎么应用 Spring 了。
Spring 外围是 IoC 容器,所以肯定要透彻了解什么是 IoC 容器,以及如何配置及应用容器,其余所有技术都是基于容器实现的;
了解好 IoC 后,接下来是面向切面编程,首先还是明确概念,根本配置,最初是实现原理,接下来就是数据库事务管理,其实 Spring 治理事务是通过面向切面编程实现的,所以根底很重要,IoC 容器和面向切面编程搞定后,其余都是基于这俩货色的实现,学起来就更加轻松了。要学好 Spring 不能急,肯定要把根底打牢,根底牢固了,这就是磨刀不误砍柴工。
文末福利,点击支付上百本 Java 电子书合集,总有你须要的那一本