为什么CDI无法取代Spring

CDI是JavaEE 6的一部分,这是一个巨大的进步。 现在,有一个标准告诉供应商和开发人员如何进行DI。 它可以完善,但是仍然在这里。 恕我直言,规范和标准在任何行业都是一件好事。 但是,我不同意某些人的观点,这意味着春天的终结。 这里有多个DI框架,Spring是第一名。

这是为什么? 因为是第一个? 不是(看看阿瓦隆 )。 我认为这是因为Spring的DI机制只是其功能的一部分。 当然,这很好,但Guice和现在的CDI提供了相同的功能。 Spring真正与众不同的地方是它的JavaEE API和基于DI的市场上最好的组件的集成。

这个附加值的一个很好的例子是JMS:如果您曾经尝试过将其发布到队列中,那么您就会明白我的意思。 这是您需要编写的代码类型:

Contextcontext=newInitialContext();
QueueConnectionFactoryqueueConnectionFactory=(QueueConnectionFactory)context.lookup("myQConnectionFactory");
Queuequeue=(Queue)context.lookup("myQueue");
QueueConnectionqueueConnection=queueConnectionFactory.createQueueConnection();
QueueSessionqueueSession=queueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
QueueSenderqueueSender=queueSession.createSender(queue);
TextMessagemessage=queueSession.createTextMessage();
message.setText("Hello world!");
queueSender.send(message);

现在在Spring中,其配置如下:

<jee:jndi-lookupid="queueConnectionFactory"jndi-name="myQConnectionFactory"/>
<jee:jndi-lookupid="q"jndi-name="myQueue"/>
<beanid="jmsTemplate">
  <propertyname="connectionFactory"ref="jmsQueueConnectionFactory"/>
  <propertyname="defaultDestination"ref="q"/>
</bean>

我不在乎它是否是较短的事件(但是它缺少发送文本的代码)。 我也不在乎XML。 我的真正兴趣是减少代码编写:减少错误,减少错误,减少测试代码。 我不必编写样板代码,因为Spring已经处理了它。 当然,我必须进行配置,但是与代码相比,这很容易。

对于JMS来说确实如此,但是对于Hibernate,EclipseLink,iBatis,JPA,JDO,Quartz,Groovy,JRuby,JUnit,TestNG,JasperReports,Velocity,FreeMarker,JSF而言,这都是最好的(或者至少是同类产品)在其类别的顶部)。 Morevover,如果没有合适的解决方案,Spring会提供:在Spring Batch中查看一个很好的框架示例,该框架处理无聊和重复的代码,让您专注于业务代码。

Guice或其他框架是否包含此类集成功能? 不,它们是纯的,“无污染的” DI框架。 这样,它们可以很容易地被CDI取代,Spring不需要太多。

翻译自: https://blog.frankel.ch/why-cdi-wont-replace-spring/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值