我坚信,作为Java开发人员,我必须保持(至少很少)最新技术的更新。 因此,我(许多Java开发人员)通常都会关注Java社区的网站或博客,以了解Java社区的最新情况。 具体来说,我确实会跟踪一些Java冠军或知名作家的最新消息,因为他们可能对Java领域的下一件大事有更好的了解。
几年前,我见过很多人谈论春天。 然后我开始学习Spring,但我仍然喜欢它。 我已经使用JavaEE5两年了,但是我没有发现Spring没有提供的任何功能。 但是最近,我每两天看到太多关于“从Spring迁移到JavaEE6”的文章。 因此,我想尝试一下,我安装了NetBeans7.1,Glassfish3.1,并做了一个简单的POC。 太好了,我仅用10分钟就可以编写一个简单的应用程序。
是的,JavaEE6在其前身上进行了很多改进。
但是,我再也没有看到Spring无法做到的任何新事物。
好的,让我分享我对“从Spring迁移到JavaEE6”文章作者选择的标准的看法。
1. WEB-INF / lib中有很多Jar
Spring应用程序在WEB-INF / lib中具有依赖关系,而JavaEE6应用程序在服务器lib中具有依赖关系。 即使对于Spring应用程序,我们也不需要手动下载所有这些Jar,我们可以使用Maven / Ivy,甚至可以从配置了所有依赖项的原型模板开始。 而且这是唯一的工作。 我不确定通过在服务器库中而不是WEB-INF / lib中使用jars可以提高性能。 如果是这种情况,我们可以将Spring应用程序依赖项放在服务器库中。
我在这里想念的是什么?
2.类型安全的依赖注入
从Spring 2.5开始,我们使用@Autowired提供了基于注释的DI支持,如果您仍然说Spring是基于XML的,请看一下Spring3.x。 如果您想给spring bean指定一个自定义名称(如果对同一接口有多个实现),则可以。 它与JavaEE6的CDI @Injext和@Named有何不同?
3.约定优于配置
EJB3方法默认情况下是事务性的,只需使用@Stateless对其进行拍击即可。 在Spring中,我们可以创建一个自定义StereoType,例如@TransactionalServe,例如@Service @Transactional public @interface TransactionalServe {},并且可以实现Convention over Configuration。
我在这里想念什么吗?
4. Spring依赖JavaEE
当然,Spring取决于JavaSE和JavaEE。 Spring只是使开发变得容易。 您始终可以通过更简单的方式在Spring中使用JavaEE API,例如JSF,JPA,JavaMail等。 有人说Spring完全消失了JavaEE吗? 没有。
5.基于标准,App Server支持,许可等等。
这些是开发人员没有太多(任何)控制的东西。 从开发人员的角度来看,我们喜欢使开发变得更容易的一切。 因此,我没有看到任何有效的理由将现有的Spring应用程序迁移到JavaEE6。 到现在为止,我还没有发现CDI可以做的事情和Spring不能做的事情。 对于仅进行依赖注入的新建项目,我们可能不需要Spring,因为我们已经在JavaEE6中内置了CDI。 JavaEE6是否解决以下任何问题:
1. 批处理 :几乎所有大企业都有一些批处理作业要运行。 JavaEE6是否支持实现它们。 您是否建议使用Spring Batch或在原始JavaEE6中从头开始。
2. 社交网络集成 :这些天来,Web应用程序与社交网络站点集成已成为非常普遍的要求。 同样,您在JavaEE6中拥有什么呢?
3. 环境配置文件:在Spring中,可以在“测试”配置文件中启用我的模拟服务,在“生产”配置文件中启用我的真实服务。 我知道@Alternative,但是我们可以在不使用基于String的注入的情况下配置两个以上的替代方法吗? 4. Web应用程序安全性: JavaEE6中Spring-security的对应部分是什么? 5.如何与NoSQL,Flex,移动开发等集成?
JavaEE6现在获得了CDI,因此Spring突然成为了遗产!
结论:是的,JavaEE6现在(很晚才有)很酷的东西,但是无论如何它不会取代Spring。 春天万岁。
参考: JavaEE6必须从Spring获得哪些附加功能? 我的JCG合作伙伴 Siva Reddy的“ 我的实验”博客上的内容。
翻译自: https://www.javacodegeeks.com/2012/04/what-additional-features-does-java-ee-6.html