[Java] À quoi sert exactement Spring Framework?


Answers

Spring contient ( comme Skaffman l'a souligné à juste titre ) un framework MVC. Pour expliquer en un mot, voici mes entrées. Spring prend en charge la ségrégation de la couche de service, de la couche Web et de la couche de gestion, mais ce qu'elle fait de mieux, c'est "l'injection" d'objets. Donc, pour expliquer cela avec un exemple, considérons l'exemple ci-dessous:

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
   }
}

Maintenant, dans votre code, vous avez une classe appelée RoadTrip comme suit

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

Maintenant, quand vous voulez une instance de Trip; parfois vous pouvez vouloir un SUV pour initialiser FourWheel ou parfois vous pouvez vouloir Sedan. Cela dépend vraiment de ce que vous voulez en fonction de la situation spécifique.

Pour résoudre ce problème, vous voudriez avoir un motif d'usine comme motif de création. Où une usine renvoie la bonne instance. Donc, finalement, vous finirez avec beaucoup de code de la colle juste pour instancier les objets correctement. Le printemps fait le travail du code de colle sans ce code de colle. Vous déclarez les mappages en XML et initialisez automatiquement les objets. Il fait également beaucoup en utilisant l'architecture singleton pour les instances et cela aide à optimiser l'utilisation de la mémoire.

Ceci est également appelé Inversion Of Control. D'autres cadres pour ce faire sont Google guice, conteneur Pico etc.

En dehors de cela, Spring dispose d'un cadre de validation, un support étendu pour la couche DAO en collaboration avec JDBC, iBatis et Hibernate (et bien d'autres). Fournit un excellent contrôle transactionnel sur les transactions de base de données.

Il y a beaucoup plus au printemps qui peut être lu dans de bons livres comme "Pro Spring".

Les URL suivantes peuvent également être utiles.
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

J'entends beaucoup parler du Spring , les gens disent partout sur le web que le printemps est un bon cadre pour le développement web. À quoi sert exactement Spring Framework? Comment puis-je l'utiliser pour mon développement d'application Web-Java? des exemples?




Je vois deux parties à cela:

  1. "Qu'est-ce que le printemps est exactement pour" -> voir la réponse acceptée par Victor Hugo.
  2. "[...] Le printemps est [un] bon cadre pour le développement web" -> les gens disent que cela parle de Spring MVC. Spring MVC est l'une des nombreuses parties de Spring, et est un framework web qui utilise les fonctionnalités générales de Spring, comme l'injection de dépendance. C'est un framework assez générique en ce qu'il est très configurable: vous pouvez utiliser différentes couches de db (Hibernate, iBatis, plain JDBC), différentes couches de vue (JSP, Velocity, Freemarker ...)

Notez que vous pouvez parfaitement utiliser Spring dans une application web sans utiliser Spring MVC. Je dirais que la plupart des applications web Java le font, tout en utilisant d'autres frameworks web comme Wicket, Struts, Seam, ...




Les vieux jours, le printemps était un travail de base d'injection de dépendance seulement comme ( Guice , PicoContainer , ...), mais maintenant un jour c'est une solution totale pour construire votre application d'entreprise .

L'injection de dépendance au printemps, qui est bien sûr le cœur du printemps, est toujours là (et vous pouvez passer en revue d'autres bonnes réponses ici), mais il y en a d'autres à partir du printemps ....

Le printemps a maintenant beaucoup de projets, chacun avec quelques sous-projets ( http://spring.io/projects ). Quand quelqu'un parle du printemps, vous devez savoir de quel projet de printemps il parle, est-il seulement le noyau de printemps, qui est connu comme le cadre de printemps , ou c'est un autre projet de printemps.

Certains projets de printemps qui méritent d'être mentionnés sont:

Si vous avez besoin de plus de fonctionnalités pour votre application, vous pouvez le trouver aussi:

  • cadre de lot lot de printemps conçu pour permettre le développement de
    application par lots
  • spring HATEOAS création facile de base REST api sur HATEOAS principal
  • ressort mobile et ressort andriod pour le développement d'applications mobiles
  • Spring Shell construit une application shell complète (aka ligne de commande)
  • nuage de printemps et flux de données de nuage de printemps pour les applications de cloud

Il y a aussi quelques petits projets par exemple spring-social-facebook ( http://projects.spring.io/spring-social-facebook/ )

Vous pouvez utiliser le printemps pour le développement web car il a le module Spring MVC qui fait partie du projet de cadre de printemps . Ou vous pouvez utiliser le printemps avec un autre travail de trame web, comme struts2 .




Le printemps est trois choses.

  1. Spring gère Dependency Injection et je vous recommande de lire l'excellente introduction de Martin Fowler sur l'injection de dépendance.
  2. La deuxième chose que Spring fait est de mettre en place d'excellentes bibliothèques Java d'une manière très élégante à utiliser dans vos applications. Pour un bon exemple, voyez comment Spring enveloppe les Task Executors et Quartz Scheduler.
  3. Troisièmement Spring fournit un tas d'implémentations de trucs web comme REST, un framework web MVC et plus encore. Ils comprennent que vous utilisez Spring pour les deux premiers, peut-être que vous pouvez simplement l'utiliser pour tout ce dont votre application web a besoin.

Le problème est que Spring DI est vraiment bien pensé, les wrappers autour d'autres choses sont vraiment bien pensés en ce sens que les autres choses ont pensé à tout et que Spring l'enveloppe bien. Les implémentations Spring de MVC et REST et toutes les autres choses ne sont pas aussi bien faites (YMMV, IMHO) mais il y a des exceptions (Spring Security is da bomb). J'ai donc tendance à utiliser Spring pour DI, et ses wrappers cool mais je préfère d'autres choses pour le Web (j'aime beaucoup Tapestry), REST (Jersey est vraiment robuste), etc.




Le printemps a été l'injection de dépendance au début, puis ajouter le roi des wrappers pour presque tout (wrapper sur les implémentations JPA, etc).

Longue histoire ... la plupart des parties de Spring preffer des solutions XML (moteur de script XML ... brrrr), donc pour DI j'utilise Guice

Bonne bibliothèque, mais avec depnedenciec croissant, par exemple Spring JDBC (peut-être une solution jdbc Java avec des paramètres de noms réels) prendre de maven 4-5 ensuite.

Utiliser Spring MVC (partie de "big spring") pour le développement web ... c'est un framework "request based", il y a la guerre sainte "request vs component" ... à Toi




Dans le passé, j'ai pensé à Spring framework d'un point de vue purement technique.

Compte tenu de l'expérience du travail d'équipe et du développement des Webapps d'entreprise, je dirais que Spring est pour le développement plus rapide des applications (applications web) en découplant ses éléments individuels (les beans). Le développement plus rapide le rend si populaire. Le ressort permet de transférer la responsabilité de la construction (câblage) de l'application sur la structure Spring. L' injection de dépendance du framework Spring est responsable de la connexion / du câblage des beans individuels dans une application de travail.

De cette façon, les développeurs peuvent se concentrer davantage sur le développement de composants individuels (les beans) dès que les interfaces entre les beans sont définies.

Le test d'une telle application est facile - l'accent principal est donné aux haricots individuels. Ils peuvent être facilement découplés et raillés, de sorte que les tests unitaires sont rapides et efficaces.

Le framework Spring définit plusieurs beans spécialisés, tels que @Controller ( @Restcontroller ), @Repository , @Component pour le Web. Le printemps avec Maven fournit une structure intuitive pour les développeurs. Le travail d'équipe est facile et rapide car il y a des éléments individuels qui sont séparés et peuvent être réutilisés.




L'avantage est l' injection de dépendances (DI) . Cela signifie externaliser la tâche de création d'objet. Laissez-moi vous expliquer avec un exemple.

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
   }
}

Maintenant dans mon code j'ai une classe LunchDecide comme suit:

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 
    }
}

Dans la classe ci-dessus, en fonction de notre humeur, nous choisissons Buffet () ou Plated (). Cependant, ce système est étroitement couplé. Chaque fois que nous avons besoin d'un type d'objet différent, nous devons changer le code. Dans ce cas, commenter une ligne! Imaginez qu'il y ait 50 classes différentes utilisées par 50 personnes différentes. Ce serait un sacré bordel. Dans ce cas, nous devons découpler le système. Réécrivons la classe LunchDecide.

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

Notez qu'au lieu de créer un objet en utilisant un nouveau mot-clé, nous avons passé la référence à un objet de type déjeuner en tant que paramètre de notre constructeur. Ici, la création d'objet est externalisée. Ce code peut être câblé soit en utilisant le fichier de configuration Xml (ancien) ou Java Annotations (moderne). D'une manière ou d'une autre, la décision sur le type d'objet qui sera créé sera prise lors de l'exécution. Un objet serait injecté par Xml dans notre code - Notre code dépend de Xml pour ce travail. Par conséquent, l'injection de dépendance (DI). DI contribue non seulement à rendre notre système faiblement couplé, mais aussi à simplifier l'écriture de tests unitaires car il permet de se moquer des dépendances. Dernier point, mais non le moindre, DI simplifie la programmation orientée aspect (AOP), ce qui conduit à un découplage supplémentaire et à une augmentation de la modularité. Notez également que ci-dessus DI est Constructor Injection. DI peut être fait aussi par Setter Injection - même méthode de setter vieille vieille de l'encapsulation.




Spring est une bonne alternative à la technologie Enterprise JavaBeans (EJB) . Il a également un cadre Web et un composant de cadre de services Web.