侵入的确切含义是什么?是什么让Spring非侵入性?

时间:2013-03-11 07:10:50

标签: java spring apache pojo

我是Spring框架的新手。在我看到的大多数Spring教程中,Spring被描述为"非侵入式"。

入侵是什么意思?在Java中使用Spring有什么优点,是什么让它成为非侵入性的?

9 个答案:

答案 0 :(得分:10)

如果IoC容器是侵入性的,则意味着您的代码需要明确了解依赖注入。例如,在Guice中,您使用@Inject注释(和其他注释)。这些注释比以前更加标准化,这很好 - 这意味着只需一组注释,您就可以(至少在理论上)使您的代码可用于各种不同的侵入式IoC容器。

使用非侵入式容器,您可以编写代码而不参考IoC ...所有内容只是通过对成员和注释的反映来确定即使您不是不使用IoC。

侵入性和非侵入性容器的优点和缺点 - 例如,在代码中更具体,可以让您更好地控制绑定的一些细节 - 但是值得注意区别。

答案 1 :(得分:4)

检查http://forum.springsource.org/showthread.php?27846-Spring-is-non-invasive

  

这究竟意味着什么?

“您不必强制导入或扩展任何Spring API,例如Struts强制您扩展Action”。

当然,在某些领域,例如Web框架,根据框架,不可能避免使用应用程序代码。但是Spring一直试图达到配置管理所关注的非侵入性理想

答案 2 :(得分:3)

春天可以是侵入性的,非侵入性的,只取决于你。

非invansive spring不使用注释(例如@Autowired)也不使用它自己的类(例如JdbcTemplate),它只使用配置将bean(简单POJO)连接在一起(你仍然需要以某种方式初始化spring)你的代码,无论如何都有点侵入性)。但是你没有任何重大的代码更改就可以自由地抛出弹簧。另一方面,入侵弹簧为您提供模板类(用于持久性,Web服务......),注释和其他您不能简单地留下而不进行重构的东西(如果您使用它们)。

编辑:有人说spring不是侵入性的,因为它不会强迫你实现接口,也不会扩展类。对我来说,框架不是侵入性的,如果它可以很容易地被替换。

答案 3 :(得分:3)

  

大多数java框架都会强制您扩展其中一个类   或实现其中一个接口。这种侵入性的例子   编程模型是早期的EJB 2时代的无状态会话bean   Struts,WebWork,Tapestry等版本。

     

Spring避免使用API​​乱丢代码。 春天永远不会强迫   你要实现一个特定于Spring的接口或扩展一个   特定于春天的课程。相反,这些课程通常没有   表明他们正被Spring使用。

public class HelloWorld {
public String hello() {
return "Hello World";
}
}
  

这是一个简单的Java类(POJO)。 没有任何迹象表明它是一个   Spring组件。 Spring是非侵入性的,这类可以   在Spring应用程序中同样可以正常运行   非Spring应用程序。尽管POJO很简单,但它们可以   强大。

     

POJO在Spring中变得强大的方法之一就是使用   Dependeny注射剂。

答案 4 :(得分:1)

侵入性框架意味着您被迫扩展其类之一或实现其接口之一。您可以在诸如Struts或EJB2的框架中看到这一点。春天不是侵入性的,因为避免了这种情况。在最坏的情况下,一个类可能会用Spring的注释之一进行注释,但否则就是POJO。所以只有您需要这样的POJO:

package com.habuma.spring;
 public class HelloWorldBean {
  public String sayHello() {
return "Hello World";
 }
}

答案 5 :(得分:0)

Spring框架被认为是一种非侵入性的手段,它不会强迫程序员从Spring API提供的任何预定义类或接口扩展或实现他们的类,在struts中我们用来扩展Action类,这就是为什么struts据说是侵入性的。

对于struts框架,它将强制程序员,程序员类必须从struts API提供的基类扩展。

答案 6 :(得分:0)

使用@Resource和@Inject代替@Component和@Autowired。它非常有用,并且在诸如Spring和Guice之类的DI框架中实现了标准化。

答案 7 :(得分:0)

具有侵略性的含义-很快传播开来。 Spring的作者说,诸如EJB,Struts等框架充满了框架特定的代码,这些代码很难迁移到其他框架,这与Java编写一次即可在任何地方运行的哲学背道而驰。 Spring说它是非侵入性的,因为它使用POJO编写服务器端,因此可以迁移到任何平台。但是,正如至少2位投稿人在这篇文章中所暗示的那样,Spring是癌症,与其声称的相反。

  

spring是一个项目的癌症,一旦它感染了您的项目,您就无法在不对spring config文件进行黑客攻击的情况下做任何事情……非侵入性在这方面极具误导性! – user177800 2013年3月11日7:18

答案 8 :(得分:0)

宣称春天是非侵入性的,就像声称地球是平坦的一样。您完全基于个人偏见而否认现实。

Spring不仅侵入您的代码库,而且还侵入您的大脑。当您对在网络上搜索有关编程问题的信息和解决方案建立了良好的信心时,这将使您烦恼。 我已经用大约10种语言和Shell完成了认真的编程工作,并且几乎总是设法找到有用的信息,答案和提示来解决我的问题。通常,我有时会经过一些挖掘,然后设法很快找到一个不错的解决方案。 Spring并非如此。一种曾经流行的脚本语言吹捧这个口号“做事不止于此”。对于Spring,您通常会找到许多方法,或者在特定设置中无法使用的许多方法。

我毫不怀疑Spring具有真正的价值。我知道了但是它带来了太多的魔力,只要它能正常工作就可以正常工作,但是一旦失败,工具和文档通常也会失败。