[Java] Spring框架到底是什么?


Answers

Spring 包含正如Skaffman正确指出的 )MVC框架。 简而言之,这里是我的投入。 Spring支持服务层,Web层和业务层的分离,但它真正最擅长的是“注入”对象。 所以用一个例子来解释下面的例子:

public interface FourWheel
{
   public void drive();
}

public class Sedan implements FourWheel
{
   public void drive()
   {
      //drive gracefully
   }
}

public class SUV implements FourWheel
{
   public void drive()
   {
      //Rule the rough terrain
   }
}

现在在你的代码中你有一个名为RoadTrip的类,如下所示

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

现在,无论何时你想要一个Trip的实例; 有时您可能需要SUV来初始化FourWheel,或者有时您可能需要Sedan。 根据具体情况确实取决于你想要什么。

为了解决这个问题,你希望有一个工厂模式作为创建模式。 工厂返回正确的实例。 所以最终你会得到大量的胶水代码来正确地实例化对象。 如果没有胶水代码,Spring会完成胶水代码的工作。 你用XML声明映射,并自动初始化对象。 它还为实例使用单例体系结构做了很多工作,这有助于优化内存使用。

这也被称为控制反转。 其他的框架是Google guice,Pico容器等。

除此之外,Spring还有验证框架,与JDBC,iBatis和Hibernate(还有更多)协作,对DAO层提供了广泛的支持。 对数据库事务提供卓越的事务控制。

春天还有很多东西可以在“Pro Spring”这样的好书中读到。

以下网址可能也有帮助。
http://static.springframework.org/docs/Spring-MVC-step-by-step/
http://en.wikipedia.org/wiki/Spring_Framework
http://www.theserverside.com/tt/articles/article.tss?l=SpringFramework

Question

我听到很多关于Spring ,人们都在网络上说Spring是一个很好的Web开发框架。 Spring框架到底是什么? 我如何将它用于我的Web-Java应用程序开发? 任何例子?




过去, Spring只是一个依赖注入框架工作,就像( GuicePicoContainer ,...)一样,但现在它已经成为构建企业应用程序的完整解决方案。

春天依赖注入,当然是春天的心脏仍然存在(你可以在这里查看其他的好答案),但春天​​还有更多......

Spring现在有很多项目,每个项目都有一些子项目( http://spring.io/projects )。 当有人谈到春天时,你必须找出他在说什么春季项目 ,它只是春天的核心,这就是所谓的春天框架 ,或者它是另一个春天的项目。

一些值得一提的春季项目是:

如果您需要为应用程序指定更多指定功能,那么您可能也会发现它:

  • 弹簧批量框架的设计使开发成为可能
    批量应用
  • Spring HATEOAS基于HATEOAS原型轻松创建REST API
  • 用于移动应用开发的spring mobilespring andriod
  • spring shell构建一个全功能的shell(aka命令行)应用程序
  • 春季云春季云数据流云应用程序

还有一些小项目,例如spring-social-facebookhttp://projects.spring.io/spring-social-facebook/

您可以使用Spring进行Web开发,因为它具有Spring MVC模块,该模块是Spring MVC 框架项目的一部分。 或者你可以使用spring与其他web框架工作,如struts2




在过去,我从纯技术的角度思考Spring框架。

鉴于团队合作和开发企业级Web应用程序的一些经验 - 我想说Spring是通过解耦其各个元素(bean)来加快应用程序 (Web应用程序)的开发 。 更快的开发使其如此受欢迎。 Spring允许将构建(布线)应用程序的职责转移到Spring框架上。 Spring框架的依赖注入负责将单个bean连接/连接到一个工作的应用程序中。

这样,一旦定义了bean之间的接口,开发人员就可以更专注于单个组件(bean)的开发。

这种应用程序的测试很简单 - 主要关注的是单个bean。 他们可以很容易地解耦和嘲弄,因此单元测试是快速和高效的。

Spring框架定义了多个专门的bean,例如@Controller@Restcontroller ), @Repository@ Component来提供Web目的。 Spring和Maven一起为开发人员提供了直观的结构。 团队的工作非常简单快捷,因为单个元素分开存放并可以重复使用。




我看到两个部分:

  1. “春天到底是什么” - >见维克托·胡戈接受的答案。
  2. “[...] Spring是一个很好的Web开发框架” - >人们说这是在谈论Spring MVC。 Spring MVC是Spring的许多部分之一,它是一个使用Spring的一般特性的Web框架,就像依赖注入一样。 这是一个非常通用的框架,因为它非常易于配置:您可以使用不同的数据库层(Hibernate,iBatis,普通JDBC),不同的视图层(JSP,Velocity,Freemarker ...)

请注意,您可以在不使用Spring MVC的情况下完美地在Web应用程序中使用Spring。 我会说大多数Java Web应用程序都这样做,而使用其他Web框架,如Wicket,Struts,Seam ......




Spring在开始时就是依赖注入,然后为几乎所有东西添加包装王(包装JPA实现等)。

长篇故事...... Spring preffer XML解决方案(XML脚本引擎... brrrr)的大部分部分,因此对于DI我使用Guice

良好的库,但随着depnedenciec的增长,例如Spring JDBC(可能是一个具有实名参数的Java jdbc解决方案)接下来是maven 4-5。

使用Spring MVC(“大春天”的一部分)进行Web开发......它是“基于请求”的框架,有圣战“请求与组件”......由你决定




优点是依赖注入(DI) 。 这意味着外包创建对象的任务。让我用一个例子来解释。

public interface Lunch
{
   public void eat();
}

public class Buffet implements Lunch
{
   public void eat()
   {
      // Eat as much as you can 
   }
}

public class Plated implements Lunch
{
   public void eat()
   {
      // Eat a limited portion
   }
}

现在在我的代码中,我有一个类LunchDecide,如下所示:

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(){
        this.todaysLunch = new Buffet(); // choose Buffet -> eat as much as you want
        //this.todaysLunch = new Plated(); // choose Plated -> eat a limited portion 
    }
}

在上面的课堂中,根据我们的情绪,我们选择Buffet()或Plated()。 然而这个系统紧密耦合。 每次我们需要不同类型的对象时,我们都需要更改代码。 在这种情况下,注释掉一行! 想象一下,50个不同的人使用了50个不同的类。 这将是一个混乱的地狱。 在这种情况下,我们需要将系统解耦。 我们来重写LunchDecide类。

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(Lunch todaysLunch){
        this.todaysLunch = todaysLunch
        }
    }

请注意,我们不是使用new关键字创建对象,而是将对Lunch类型对象的引用作为参数传递给我们的构造函数。 这里,对象创建是外包的。 此代码可以使用Xml配置文件(传统)或Java注释(现代)进行连线。 无论哪种方式,在运行期间将决定哪种类型的对象将被创建。 一个对象将被Xml注入到我们的代码中 - 我们的代码依赖于该作业的Xml。 因此,依赖注入(DI)。 DI不仅有助于使我们的系统松散耦合,它简化了单元测试的编写,因为它允许依赖被嘲弄。 最后但并非最不重要的是,DI简化了面向方面编程(AOP),从而进一步解耦和增加模块性。 还要注意,上面的DI是构造器注入。 DI也可以通过Setter Injection来完成 - 与封装相同的普通旧setter方法。







春天是三件事。

  1. Spring处理依赖注入,我建议你阅读Martin Fowler关于依赖注入的优秀介绍。
  2. Spring所做的第二件事是以优雅的方式在应用程序中使用优秀的Java库。 有关示例,请参阅Spring如何包装Task Executors和Quartz Scheduler。
  3. 第三,Spring提供了大量的REST,MVC Web框架等网络实现。 他们认为,因为您在前两次使用Spring,也许您可​​以将它用于您的Web应用程序所需的一切。

问题在于Spring DI真的被深思熟虑,围绕其他事物的包装真的被深思熟虑,因为其他东西都想出来了,Spring很好地包装了它。 MVC和REST的Spring实现以及所有其他的东西没有做得很好(YMMV,恕我直言),但也有例外(Spring Security是da bomb)。 所以我倾向于使用Spring的DI,以及它的酷包装,但更喜欢Web的其他东西(我喜欢Tapestry很多),REST(泽西非常强大)等等。