2017-11-10 14:01:31 463浏览
在Java社区中,Spring与Java EE之争是个永恒的话题。在这场争论中,来自两个阵营的布道师、架构师与铁杆粉丝都在不遗余力地捍卫着本方的尊严,并试图说服对方加入到自己的阵营当中,但结果却是双方都很难说服对方,每一方都有充分的理由表明自己的选择是正确的。那么对于普通开发者来说该如何思考这场旷日持久的Spring与Java EE之争呢?
Siva是一位充满激情的JavaEE开发工程师、开源布道师、知名博主,擅长Java、Struts、Hibernate、Spring等各项技术与框架。Siva既使用过Spring,也使用过Java EE,但他既不是Spring的铁杆粉丝,也不是Java EE的忠实追求者。相反,他对于Spring与Java EE有着自己的理解和认识,并且在项目当中会根据具体需求选择适合的技术。近日,Siva分享了他对于Spring与Java EE的一些认识和理解,希望能对各位读者起到帮助作用。
业务方面
在很多组织中,技术选择并不完全是由开发者决定的。具体来说,如果你工作在一家大型的企业组织中,那么极有可能会有一个专门的架构师团队负责决定在项目中该使用什么平台、框架与库。除此之外,大型企业在选择技术平台时还会考虑如下几个方面:平台、语言、框架与库的成熟度、商业支持、许可费用等。
作为一名开发者,你可能无法影响上述几方面的决策制定过程,特别是对于那些处于离岸开发中心的开发者来说更是如此。因此,对于开发者来说,你可能无需过多关注于上述几个方面。如果你非常熟悉Spring,那么掌握Java EE也不是什么难事,反之亦然,我非常奇怪有人会说他是个Java EE专家,但却无法理解Spring,反之亦然。无论Java EE还是Spring都使用了同样的核心APIs(Servlet、JPA、JMS、BeanValidation等),差别在于到底是什么将这些东西粘合到了一起,是Spring还是应用服务器。
虽然对于依赖注入(Spring DI、CDI)、REST(JAX-RS、SpringMVC)等存在着不同的APIs,但他们彼此之间的行为却是非常类似的。可能有人会说CDI在类型安全上要比Spring DI更好,比如说:
如果只有一个Spring/CDI Bean,那么使用@Autowired或是@Inject都是没问题的。如果有两个Spring或CDI Bean实现,那么注入就会失败并抛出错误,说“找到了多个可注入的对象”。使用@Produces或@Bean注解的方法可以实现自定义的Bean提供器。只要二者行为类似,那么我就不关心谁的实现是更加类型安全的,谁在内部实现中采用了基于String的映射。我想说的是,怎么可能有人是Spring专家但却无法理解Java EE呢,反之亦然。一个Spring专家要花多长时间才能掌握Java EE呢?
Spring与Java EE哪一个对开发者更加友好呢?
我认为到现在为止,很多开发者应该能够认识到一项技术的成功与否其实并不完全取决于自身的优缺点,还要取决于开发者的使用率。通过Java EE视频教程与Spring教程的学习对比,我们要认识的重要一点是:“并不是每一个软件开发者都是明星开发者,还有很多处于中等水平的开发者”。为了让人们能够使用某一个框架或技术,框架或技术本身要贴合这一部分人的需求。我觉得Spring在这方面做得非常好,它提供了诸如Spring Boot、用户指南等工具帮助开发者上手。Spring Security、Spring Integration、Spring XD、Spring Social等项目都很好地解决了业务的需求。此外,Spring还提供了各种各样的模板,让人们能够轻松上手开发而无需编写大量的样板代码。
Java EE也通过JBoss Forge、Wildfly Swarm等工具帮助开发者上手。除了Picketlink之外,我几乎看不到有哪些Java EE框架提供了安全解决方案;但即便是Picketlink,我觉得也过于复杂了。我想表达的观点是“Spring能做到的事情,Java EE基本上也都能做”。区别在于哪一个会为普通开发者提供开箱即用的支持。
扣丁学堂有专业的JavaEE老师教导学员,不仅有与时俱进企业级的项目开发Java EE培训,还有大量的JavaEE视频教程供学员观看学习。想要名师录制的JavaEE视频教程的朋友们抓紧时间联系我们的咨询老师吧。Java技术交流群:670348138。