À quoi sert exactement Spring Framework? [fermé]


J'entends beaucoup parler de Spring, les gens disent partout sur le Web que Spring est un bon cadre pour le développement Web. À quoi sert exactement Spring Framework?

Author: xxxxxxxxxxx, 2009-06-30

17 answers

Fondamentalement Spring est un framework pour dependency-injection qui est un modèle qui permet de construire des systèmes très découplés.

Le problème

Par exemple, supposons que vous ayez besoin de lister les utilisateurs du système et de déclarer ainsi une interface appelée UserLister:

public interface UserLister {
    List<User> getUsers();
}

Et peut-être une implémentation accédant à une base de données pour obtenir tous les utilisateurs:

public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

Dans votre vue, vous devrez accéder à une instance (juste un exemple, rappelez-vous):

public class SomeView {
    private UserLister userLister;

    public void render() {
        List<User> users = userLister.getUsers();
        view.render(users);
    }
}

Note que le code ci-dessus n'a pas initialisé la variable userLister. Que devons-nous faire? Si j'instancie explicitement l'objet comme ceci:

UserLister userLister = new UserListerDB();

...Je couplerais la vue avec mon implémentation de la classe qui accède à la BASE de données. Que faire si je veux passer de l'implémentation de la base de données à une autre qui obtient la liste des utilisateurs à partir d'un fichier séparé par des virgules (rappelez-vous, c'est un exemple)? Dans ce cas, je reviendrais à mon code et changerais la dernière ligne par:

UserLister userLister = new UserListerCommaSeparatedFile();

Cela n'a aucun problème avec un petit programme comme cela mais... Que se passe-t-il dans un programme qui a des centaines de vues et un nombre similaire de classes d'affaires. L'entretien devient un cauchemar!

Approche Spring (Injection de dépendance)

Ce que Spring fait, c'est de câbler les classes en utilisant un fichier XML ou des annotations, de cette façon tous les objets sont instanciés et initialisés par Spring et injectés aux bons endroits (Servlets, Web Frameworks, Business classes, DAOs, etc, etc, etc...).

Pour revenir à l'exemple du printemps, il suffit d'avoir un setter pour le champ userLister et d'avoir soit un fichier XML comme celui-ci:

<bean id="userLister" class="UserListerDB" />

<bean class="SomeView">
    <property name="userLister" ref="userLister" />
</bean>

Ou plus simplement annoter le fichier dans notre classe view avec @Inject:

@Inject
private UserLister userLister;

De cette façon, lorsque la vue est créée, elle magiquement aura un UserLister prêt à fonctionner.

List<User> users = userLister.getUsers();  // This will actually work
                                           // without adding any line of code

C'est génial! N'est-ce pas?

  • Que faire si vous souhaitez utiliser une autre implémentation de votre interface UserLister? Juste modifier le XML
  • Que se passe-t-il si l'implémentation de UserLister n'est pas prête? Programmer une mise en œuvre fictive temporelle de {[8] } et faciliter le développement de la vue
  • Et si je ne veux plus utiliser Spring? Ne l'utilisez pas! Votre application n'y est pas couplée. Inversion du contrôle indique: "L'application contrôle le framework, pas le framework contrôle l'application".

Il existe d'autres options pour la dépendance Injection autour de là, ce qui à mon avis a rendu Spring si célèbre outre sa simplicité, son élégance et sa stabilité, c'est que les gars de SpringSource ont programmé de nombreux POJOs qui aident à intégrer Spring à de nombreux autres frameworks communs sans être intrusif dans votre application. Spring a également plusieurs bons sous-projets comme Spring MVC, Spring WebFlow, Spring Security et encore une fois une liste loooong de etceteras.

J'espère que cela aide. Quoi qu'il en soit, je vous encourage à lire Martin Article de Fowler sur l'Injection de dépendance et l'Inversion du Contrôle parce qu'il le fait mieux que moi. Après avoir compris les bases, jetez un oeil à Documentation Spring, à mon avis, il est c'était le meilleur livre de printemps de tous les temps.

 624
Author: victor hugo, 2018-06-22 00:44:24

Printemps contient (comme Skaffman souligne à juste titre) un framework MVC. Pour expliquer en bref 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 métier, mais ce qu'il fait le mieux, c'est "l'injection" d'objets. 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, chaque fois que vous voulez une instance de Voyage; parfois, vous pouvez vouloir un SUV pour initialiser FourWheel ou parfois vous pouvez vouloir berline. 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 modèle d'usine comme modèle de création. Où une usine renvoie la bonne instance. Donc, finalement, vous vous retrouverez avec beaucoup de code de colle juste pour instancier les objets correctement. Le ressort fait le travail du code de colle le mieux sans ce code de colle. Vous déclarez les mappages en XML et il initialise automatiquement les objets. Il fait aussi beaucoup utilisation de l'architecture singleton pour les instances et cela aide à optimiser l'utilisation de la mémoire.

Ceci est aussi appelé Inversion de Contrôle. D'autres cadres pour ce faire sont Google guice, Pico conteneur etc.

En dehors de cela, Spring dispose d'un cadre de validation, d'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 à Spring qui peut être lu dans de bons livres comme "Pro Spring".

Url Suivantes peuvent être utiles too.
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

 56
Author: Priyank, 2014-12-16 09:03:41

Vieux jours, printemps est une injection de dépendance cadre de travail uniquement comme (Guice, PicoContainer,...), mais maintenant un jour, il est une solution totale pour vous construire Application d'entreprise .

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

Printemps a maintenant beaucoup de projets, chacun avec certains sous-projets ( http://spring.io/projects). Quand quelqu'un parle de spring, vous devez savoir de quoi spring project il parle, est-ce seulement spring core, qui est connu sous le nom de spring framework, ou c'est un autre spring projects.

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

Si vous avez besoin d'une fonctionnalité plus précise pour votre application, vous pouvez la trouver là aussi:

  • spring batch lot cadre conçu pour permettre le développement de
    application par lots
  • spring HATEOAS création facile de la base de l'api REST sur HATEOAS principal
  • printemps mobile et printemps andriod développement d'applications pour mobiles
  • spring shell construire un shell complet (aka ligne de commande) application
  • printemps cloud et printemps nuage de flux de données pour les applications cloud

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

Vous pouvez utiliser spring pour le développement web comme il l'a fait le module Spring MVC qui fait partie du projetspring framework . Ou vous pouvez utiliser spring avec un autre travail de trame Web, comme struts2.

 28
Author: Alireza Fattahi, 2016-05-04 05:34:58

A quoi sert le printemps? Je répondrai à cette question sous peu, mais d'abord, jetons un autre regard sur l'exemple de victor Hugo. Ce n'est pas un bon exemple car cela ne justifie pas la nécessité d'un nouveau cadre.

public class BaseView {
  protected UserLister userLister;

  public BaseView() {
    userLister = new UserListerDB(); // only line of code that needs changing
  }
}

public class SomeView extends BaseView {
  public SomeView() {
    super();
  }

  public void render() {
    List<User> users = userLister.getUsers();
    view.render(users);
  }
}

Terminé! Alors maintenant, même si vous avez des centaines ou des milliers de vues, il vous suffit de changer la seule ligne de code, comme dans l'approche XML Spring. Mais changer une ligne de code nécessite toujours une recompilation par opposition à l'édition de XML vous dites? Eh bien mon ami difficile, utiliser Ant et script de suite!!!

Alors, à quoi sert le printemps? C'est pour:

  1. Développeurs aveugles qui suivent le troupeau
  2. Les employeurs qui ne veulent jamais embaucher des programmeurs diplômés parce qu'ils n'enseignent pas de tels cadres à l'Uni
  3. Projets qui ont commencé avec un mauvais design et ont besoin de patchwork (comme le montre l'exemple de victor hugo)

Pour en savoir Plus: http://discuss.joelonsoftware.com/?joel.3.219431.12

 24
Author: Ash, 2015-06-03 02:14:33

Très court résumé, je dirai que le Printemps est la "colle" dans votre application. Il est utilisé pour intégrer différents frameworks et votre propre code.

 18
Author: Johan, 2010-04-29 15:33:55

Le Printemps est trois choses.

  1. Spring gère l'injection de dépendance 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 d'envelopper d'excellentes bibliothèques Java d'une manière très élégante à utiliser dans vos applications. Pour un bon exemple, voir comment Spring enveloppe les exécuteurs de tâches et le planificateur Quartz.
  3. Troisièmement, Spring fournit un tas d'implémentations de choses Web comme REST, un framework Web MVC et plus encore. Ils figure puisque 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 que les autres choses ont tout pensé et Spring l'enveloppe bien. Les implémentations Spring de MVC et REST et toutes les autres choses ne sont pas aussi bien faites (YMMV, À mon humble avis) mais il y a des exceptions (Spring Security est da bomb). Donc je j'ai tendance à utiliser le printemps pour DI, et ses emballages sympas, mais je préfère d'autres choses pour le Web (j'aime beaucoup la tapisserie), le REPOS (le jersey est vraiment robuste), etc.

 13
Author: karstensrage, 2014-12-16 09:10:02

Ce que vous voudriez probablement dans une application Web avec Spring -

  • Spring MVC, qui avec 2.5+ vous permet d'utiliser POJOs comme classes de contrôleur, ce qui signifie que vous n'avez pas à vous étendre à partir d'un framework particulier (comme dans Struts ou Spring pre-2.5). Les classes de contrôleur sont également simples à tester, en partie grâce à l'injection de dépendances
  • Intégration Spring avec Hibernate, ce qui simplifie bien le travail avec cette solution ORM (dans la plupart des cas)
  • Utilisation du ressort pour une application Web vous permet d'utiliser vos objets de domaine à tous les niveaux de l'application - les mêmes classes qui sont mappées à l'aide de Hibernate sont les classes que vous utilisez comme "beans de formulaire."Par nature, cela conduira à une plus robuste modèle de domaine, en partie parce qu'il va réduire le nombre de classes.
  • Les balises Spring form facilitent la création de formulaires sans trop de tracas.

De plus, le printemps est ÉNORME - il y a donc beaucoup d'autres choses que vous pourriez être intéressé à utiliser dans un application web telle que Spring AOP ou Spring Security. Mais les quatre éléments énumérés ci-dessus décrivent les composants communs de Spring qui sont utilisés dans une application Web.

 11
Author: bpapa, 2009-06-30 21:35:18

Je vois deux parties:

  1. "À quoi sert exactement le printemps" -> voir la réponse acceptée par victor hugo.
  2. "[...] Spring est [un] bon framework pour le développement Web " - > les gens qui disent cela parlent de Spring MVC. Spring MVC est l'une des nombreuses parties de Spring, et est un framework web utilisant les caractéristiques générales de Spring, comme l'injection de dépendance. C'est un joli cadre générique qu'il est très configurable: vous pouvez utiliser différentes db couches (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, ...

 8
Author: Tom De Leu, 2012-01-10 07:55:37

Spring est idéal pour coller des instances de classes ensemble. Vous savez que vos classes Hibernate auront toujours besoin d'une source de données, Spring les relie ensemble (et a également une implémentation de la source de données).

Vos objets d'accès aux données auront toujours besoin d'un accès Hibernate, Spring transfère les classes Hibernate dans vos DAO pour vous.

De plus, Spring vous donne essentiellement des configurations solides d'un tas de bibliothèques, et en cela, vous donne des conseils dans quelles bibliothèques vous doit utiliser.

Spring est vraiment un excellent outil. (Je ne parlais pas de Spring MVC, juste du framework de base).

 7
Author: stevedbrown, 2014-12-16 09:07:39

La réponse acceptée n'implique pas l'utilisation des annotations depuis que Spring a introduit la prise en charge de diverses annotations pour la configuration.

Approche Spring (Injection de dépendance)

Il existe une autre façon de câbler les classes à côté de l'utilisation d'un fichier XML: les annotations. Utilisons l'exemple de la réponse acceptée et enregistrons le bean directement sur la classe en utilisant l'une des annotations @Component, @Service, @Repository ou @Configuration:

@Component
public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

De cette façon lorsque la vue est créé comme par magie aura un UserLister prêt à travailler.

L'instruction ci-dessus est valide avec un petit bonus d'absence d'utilisation de fichier XML et de câblage avec une autre annotation @Autowired qui trouve une implémentation pertinente et l'injecte.

@Autowired
private UserLister userLister;

Utilisez l'annotation @Bean sur une méthode utilisée pour obtenir l'implémentation du bean à injecter.

 5
Author: Nikolas, 2018-05-17 22:05:45

L'avantage est de Injection de Dépendance (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, selon notre humeur, nous choisissons Buffet() ou Plaqué(). 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, en commentant une ligne ! Imaginez qu'il y ait 50 classes différentes utilisé par 50 personnes différentes. Ce serait un sacré gâchis. 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 Lunch en tant que paramètre à notre constructeur. Ici, la création d'objets est externalisée. Ce code peut être câblé à l'aide d'un fichier de configuration Xml (hérité) ou d'annotations Java (moderne). De toute façon, la décision sur quel type d'objet serait créé serait fait là pendant l'exécution. Un objet serait injecté par Xml dans notre code - Notre code dépend de Xml pour ce travail. Par conséquent, Injection de dépendance (DI). DI aide non seulement à rendre notre système faiblement couplé, il simplifie l'écriture de tests unitaires car il permet de se moquer des dépendances. Enfin, DI rationalise 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 l'injection du constructeur. DI peut être fait par injection de setter aussi bien-même vieille méthode simple de setter de l'encapsulation.

 4
Author: Sumit Pokhrel, 2017-09-17 18:07:04

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

 3
Author: fastcodejava, 2010-02-12 02:00:45

Spring a commencé comme un système d'injection de dépendance assez simple. Maintenant, il est énorme et a tout dedans (sauf pour l'évier de cuisine proverbiale).

Mais n'ayez crainte, il est assez modulaire donc vous pouvez utiliser uniquement les pièces que vous voulez.

Pour voir où tout a commencé, essayez:

Http://www.amazon.com/Expert-One-Design-Development-Programmer/dp/0764543857/ref=sr_1_1?ie=UTF8&s=books&qid=1246374863&sr=1-1

C'est peut-être vieux mais c'est un excellent livre.

Pour un autre bon livre cette fois exclusivement consacré au printemps voir:

Http://www.amazon.com/Professional-Java-Development-Spring-Framework/dp/0764574833/ref=sr_1_2?ie=UTF8&s=books&qid=1246374863&sr=1-2

Il fait également référence aux anciennes versions de Spring mais vaut vraiment la peine d'être regardé.

 1
Author: Pablojim, 2009-06-30 15:38:19

Spring était une injection de dépendance au début, puis ajoutez le roi des wrappers pour presque tout (wrapper sur les implémentations JPA, etc.).

Longue histoire ... la plupart des parties de Printemps préférez solutions XML (XML moteur de script ... brrrr), donc pour DI j'utilise Guice

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

En utilisant Spring MVC (partie de "big spring") pour développement web ... c'est un cadre" basé sur la demande", il y a une guerre sainte" demande vs composant"... à Vous de

 1
Author: Jacek Cz, 2017-11-29 17:08:19
  • Spring est un framework léger et flexible comparé à J2EE.
  • Le conteneur à ressort agit comme une inversion de contrôle.
  • Spring utilise AOP, c'est-à-dire des proxies et des modèles de conception de méthode Singleton, Factory et Template.
  • Architectures à plusieurs niveaux: Séparation des préoccupations et des couches réutilisables et Facilité d'entretien.

entrez la description de l'image ici

 1
Author: Premraj, 2017-12-05 06:08:27

Dans le passé, je pensais à Spring framework d'un point de vue purement technique.

Compte tenu de l'expérience du travail d'équipe et du développement de Webapps d'entreprise - je dirais que Spring est pourun développement plus rapide des applications (applications Web) en découplant ses éléments individuels (beans). Un développement plus rapide le rend si populaire. Le ressort permet de déplacer la responsabilité de la construction (câblage) de l'application sur le cadre du ressort. Du framework Spring dependency injection 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 (beans) dès que les interfaces entre les beans sont définies.

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

Spring framework définit plusieurs haricots tels que @Contrôleur (@Restcontroller), @Référentiel, @Composant pour servir le web des fins de. Spring et Maven fournissent une structure intuitive pour les développeurs. Le travail d'équipe est facile et rapide car les éléments individuels sont séparés et peuvent être réutilisés.

 0
Author: Witold Kaczurba, 2018-03-26 17:18:11

Spring framework est très bon pour le développement Web plus spécifique pour l'api Rest. C'est à cause de son injection de dépendance et de son intégration avec d'autres modules comme spring security, printemps aop, cadre mvc, microservices

Toute application que vous construisez certainement vous avez besoin de sécurité.
Si vous construisez un produit, une longue maintenance, vous aurez alors besoin d'un concept Aop.

Si vous application a beaucoup plus charger alors vous devez implémenter des microservices.

Spring donne tout cela dans une seule plate-forme. Prise en charge avec de nombreux modules
L'essentiel est que spring soitopen source et extensible framework,ait un hook partout pour intégrer du code personnalisé dans le cycle de vie.

Printemps de Données est un projet qui permet une intégration avec votre projet.


Donc, tout ce dont vous avez besoin pour construire l'application a Printemps.

 -1
Author: pratik deshai, 2018-02-13 13:43:23