当前位置: 首页 > 科技观察

用SpringBoot颠覆Java应用开发

时间:2023-03-18 21:09:01 科技观察

从最初的Servlet1.0一步步发展到现在这么多的框架、库和整个生态系统,用Java做web应用开发已经快20年了。经过这么长时间的发展,Java作为一门成熟的语言,也进化出了非常成熟的生态系统。这也是为什么很多公司将Java作为服务端开发的主流语言,也是Java一直保持着非常活跃的用户群的原因。Java开发概览:Java用于web应用开发已经将近20年,从最初的Servlet1.0一步步发展到现在这么多的框架、库和整个生态系统。经过这么长时间的发展,Java作为一门成熟的语言,也进化出了非常成熟的生态系统。这也是为什么很多公司将Java作为服务端开发的主流语言,也是Java一直保持着非常活跃的用户群的原因。然而这个生态系统是复杂的,一个非常简单的JavaWeb应用程序可能会应用到以下技术:Java开发分为两个阵营,一个是以Oracle为代表的JavaEE阵营,它是Web开发的官方参考标准。核心技术主要有Servlet、EJB、JMS、JSF、JDBC/JPA、JAXB、JAX-WS等,另一阵营是以开源社区和Pivotal为代表的Spring阵营。核心技术主要包括SpringFramework、SpringMVC、SpringData、SpringSecurity等。Spring从一开始作为依赖注入的Bean容器,逐渐发展成为Java应用开发的主流框架。JavaEE因其臃肿、复杂、难以使用的结构而被许多Java程序员所抛弃。CDI(ContextDependencyInjection)是从JavaEE6才引入的,JavaEE的设计思想非常学院派。GavinKing等人脱离了行业的需求,使得JavaEE开发变得非常复杂。JSF甚至遭到Java之父JamesGosling的批评。相反,在Spring社区中,越来越多的现代应用程序开发方法被集成到不同的Spring项目中。什么是弹簧引导?SpringBoot是一个由社区反馈驱动的项目。SpringBoot可以说是Spring乃至整个Java社区至少近五年来最具影响力的项目之一。SpringBoot主要包括以下特点:1.直接将Tomcat、Jetty或Undertow作为Servlet容器嵌入。从此以后,再也不用把应用打包成war再上传到应用服务器了。2.提供starterPOM,非常方便包管理,大大减少jarhell或dependencyhell3.自动配置Spring框架,节省程序员大量时间和精力,让程序员专注于业务4.不需要为任何第三方系统编写逻辑代码。SpringBoot自带程序状态信息和健康状态,可以在生产环境中使用。同时也非常方便应用程序读取外部配置信息。5.无需自动生成任何代码。无需使用xml来配置框架。SpringBoot为何具有颠覆性?SpringBoot为何具有颠覆性?因为它彻底改变了Java应用程序的开发模式。以前我们在做Spring应用开发的时候,需要知道配置哪些类可以让Hibernate和Spring协同工作,需要知道如何配置视图解析器来控制在视图层显示哪个模板。我经常写了很多代码,发现我只是在处理Spring框架本身的配置,而没有写一行业务逻辑。开发完成后,我们还需要考虑部署的问题,别说是部署到非常重的应用服务器,比如WebSphere、Weblogic或者JBoss,就是部署到轻量级的容器,比如Tomcat或者Jetty,我们也需要知道如何配置容器,如何修改配置文件等等。并且当多个应用程序部署到同一个Tomcat时,经常会发生冲突。即使我们花很大的力气去解决这些问题,在程序部署成功后,我们也很难了解程序的运行状况。有可能我们需要配置很多第三方工具,才能知道应用运行的怎么样,有哪些参数,有哪些环境变量。虽然Spring帮我们解决了依赖注入的问题,简化了一些MVC流程,但是Spring框架本身集成的东西越来越多,配置起来也越来越难,维护成本呈线性上升。很多时候Java程序员看到Python、Ruby或者JavaScript程序员敲几条命令安装一些库,然后简单敲几行代码,引入一些flask之类的框架,然后直接用一个简单的API就可以运行了。这个时候Java程序员可能还在研究使用Maven中的哪个库,在代码中如何配置。大家心里的表情一定是这样的:(求Java程序员此时的心理阴影区)Java程序员是时候该感到自豪了!传统的Spring开发与SpringBoot应用程序开发。下面我将通过具体的例子来比较传统的Spring应用开发和Spring应用开发。启动应用程序开发。如果我们开发一个HelloWorldRESTAPI,传统的Spring开发应该是这样做的。1.如果使用Maven进行包管理,如上所示编写pom.xml。为了写一个简单的helloworldRESTAPI,引入了SpringCore、SpringWeb、SpringWebMVC、JavaServlet和Jackson这么多包依赖。你可以想象这个pom对于一个更复杂的程序会是什么样子。..2、编写HelloWorldInitializer类如下。这已经是一个非常简单的JavaConfig。那些在Servlet3.0之前用XML配置Spring的人现在可能已经崩溃了。3.编写HelloWorldConfiguration类,注意我们的类中没有业务线逻辑。..4.真正开始编写HelloWorldRestController5。下载Tomcat6。打包部署到Tomcat7。访问localhost:8080/HelloWorld,终于看到HelloWorld了。。。写的有点累,不爱了。..接下来Java老司机带大家感受一下SpringBoot的魅力:1.写pom.xml注意我们只引入了一个包依赖,让他去版本。2.编写主函数。这里我们标记的HelloWorldDemoApplication类是SpringBootApplication,SpringBoot会在后台根据这个标记进行很多自动配置,比如配置MVC,配置包扫描,注入必要的类,注入自动配置的类等等。这里的main函数是一个java标准的main函数,相当于应用入口。servlet容器启动时会找到这个入口,启动Spring容器,完成初始化。3.编写HelloWorldRestController4。无需部署,直接启动应用。HelloWorld程序对于新手来说至少需要10-20分钟。有了SpringBoot,最多3分钟搞定HelloWorld不是梦。综上所述,这里我只是简单说明一下SpringBoot。SpringBoot有很多值得深入探讨的东西。它不仅让我们的Java开发变得简单有效,更重要的是,SpringBoot彻底颠覆了我们对Java开发的认识。第一次有“原来Java开发也可以这样”的感觉。借助SpringBoot,Java程序员可以更专注于业务逻辑,开发更敏捷。