Java EE框架
初学Java时就感觉Java内容好多但是又好散,学了就忘。后来接触了几个web项目,才感觉“spring全家桶”是真香。
在当今的Java EE框架中,spring的家族实在是太强大了(Spring、SpringMVC、SSM、SSH、Spring Boot),所以好多人就会跟我一样不知道这么多框架怎么学?我该先学习哪个?
所以我就查阅了一些文本和视频资料,总结了一些自己的理解。接下来,我会基于这些框架优缺点和当今的发展流行趋势,做一个个人的推荐学习顺序。
spring
首先,spring家族当中spring当然是极其重要的,Java EE众多框架中都有他的影子,所以有的人就会问要不要先学Spring。首先,我们来介绍一下Spring。
Spring 是一个主流的 Java Web 开发框架,该框架是一个轻量级的应用框架,具有很高的凝聚力和吸引力。Spring 框架因其强大的功能以及卓越的性能而受到众多开发人员的喜爱。
Spring 是分层的 Java SE/EE full-stack 轻量级开源框架,以 IoC(Inverse of Control,控制反转)和 AOP(Aspect Oriented Programming,面向切面编程)为内核,使用基本的 JavaBean 完成以前只可能由 EJB 完成的工作,取代了 EJB 臃肿和低效的开发模式。这也就是所谓的“由黑暗的EJB时代进化到spring时代”。
在实际开发中,通常服务器端采用三层体系架构,分别为表现层(web)、业务逻辑层(service)、持久层(dao)。
Spring 对每一层都提供了技术支持,在表现层提供了与 Struts2 框架的整合,在业务逻辑层可以管理事务和记录日志等,在持久层可以整合 Hibernate 和 JdbcTemplate 等技术。
从设计上看,Spring 框架给予了 Java 程序员更高的自由度,对业界的常见问题也提供了良好的解决方案,因此,在开源社区受到了广泛的欢迎,并且被大部分公司作为 Java 项目开发的首选框架。
Spring 具有简单、可测试和松耦合等特点,不仅可以用于服务器端的开发,也可以应用于任何 Java 应用的开发中。
Spring 框架的主要优点具体如下。
1)方便解耦,简化开发
Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。
2)方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。
3)降低 Java EE API 的使用难度
Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。
4)方便程序的测试
Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。
5)AOP 编程的支持
Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。
6)声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无须手动编程。
总的来说,Spring就是一个轻量级的控制反转(IOC)和面向切片(AOP)的企业级容器框架。可以帮助公司实现对一些复杂后端服务。也正是这两个特性极大地降低了企业开发的复杂度。就IOC来讲,上面也提到了他不是一门新技术,而是一种编程设计思想,有了它之后项目里复杂的对象管理工作就摆脱了,也就是上面所说的摆脱EJB用来new对象的时代,在传统开发中,我们需要在对象内部new一个其他对象,这也就建立了对象之间的某种依赖,而且还需要程序员自己维护。但是IOC可以自己设计好的对象交给第三方进行实例化管理。也就是说IOC可以更好的创建和组装对象之间的依赖关系,也就是xml配bean。
但是以上这些Spring的优点也限制了Spring有一个缺点:如果一个项目过大,就需要引入过多的配置文件。这样就会更加复杂且易出错。而且在使用Spring和SpringMVC到时候大部分同学也都是最烦xml配bean这模块吧。
一个web项目的开发步骤配置的繁琐过程:
1.配置maven依赖。
2.配置web. xml,加载Spring或者Spring MVC。
3.配置数据库连接,配置Spring事物。
4.配置加载文件的读取,开启注解。
5.可能还要配置日志文件…
…
最后还要部署tomcat。
Spring Boot
还是首先要了解一下Spring Boot。它是什么?
随着动态语言的流行(Ruby、Groovy、Scala、Node.js),Java 的开发显得格外的笨重,繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大。
在上述环境下,Spring Boot 应运而生。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置一个习惯性的配置,让你无须手动进行配置)的理念让你的项目快速运行起来。
使用 Spring Boot 很容易创建一个独立运行(运行 jar,内嵌 Servlet 容器)、准生产级别的基于 Spring 框架的项目,使用 Spring Boot 你可以不用或者只需要很少的 Spring 配置。
Spring Boot 核心功能
1)独立运行的 Spring 项目
Spring Boot 可以以 jar 包的形式独立运行,运行一个 Spring Boot 项目只需通过 java–jar xx.jar 来运行。
2)内嵌 Servlet 容器
Spring Boot 可选择内嵌 Tomcat、Jetty 或者 Undertow,这样我们无须以 war 包形式部署项目。
3)提供 starter 简化 Maven 配置
Spring 提供了一系列的 starter pom 来简化 Maven 的依赖加载,例如,当你使用了spring-boot-starter-web 时,会自动加入如图 1 所示的依赖包。
4)自动配置 Spring
Spring Boot 会根据在类路径中的 jar 包、类,为 jar 包里的类自动配置 Bean,这样会极大地减少我们要使用的配置。当然,Spring Boot 只是考虑了大多数的开发场景,并不是所有的场景,若在实际开发中我们需要自动配置 Bean,而 Spring Boot 没有提供支持,则可以自定义自动配置。
5)准生产的应用监控
Spring Boot 提供基于 http、ssh、telnet 对运行时的项目进行监控。
6)无代码生成和 xml 配置
Spring Boot 的神奇的不是借助于代码生成来实现的,而是通过条件注解来实现的,这是 Spring 4.x 提供的新特性。Spring 4.x 提倡使用 Java 配置和注解配置组合,而 Spring Boot 不需要任何 xml 配置即可实现 Spring 的所有配置。
Spring Boot的优缺点
1)优点
快速构建项目。
对主流开发框架的无配置集成。
项目可独立运行,无须外部依赖Servlet容器。
提供运行时的应用监控。
极大地提高了开发、部署效率。
与云计算的天然集成。
2)缺点
版本迭代速度很快,一些模块改动很大。
由于不用自己做配置,报错时很难定位。
网上现成的解决方案比较少。
我了解了Spring Boot之后。我感觉,Spring Boot就是一个用来优化Spring的框架。它可以让开发人员更加方便的使用Spring。而且,Spring Boot直接把xml配bean给简化掉了。这也是Spring Boot的根本思想CoC(当然不是clash of clans哈哈哈,是convention of configuration)也就是约定大于配置。开法人员只需要规定应用中不符合约定的部分,其他绝大部分Spring Boot已经配置好了。
但是使用了Spring Boot之后这种开发就变得非常便捷。只需建立一个Spring Boot工程,配置好maven依赖基本上就可以直接启动了,因为其他的配置Spring Boot已经帮忙搞好了。
所以我感觉最好是先学习Spring Boot,了解了相关原理知识之后再学习Spring和Spring MVC。