Question À quoi sert exactement Spring Framework? [fermé]


J'entends beaucoup parler de Printemps, les gens disent sur le web que Spring 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?


524
2018-06-30 04:25


origine


Réponses:


Fondamentalement, le printemps est un cadre pour  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 deviez lister les utilisateurs du système et 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
    }
}

À votre avis, vous devrez accéder à une instance (par exemple, rappelez-vous):

public class SomeView {
    private UserLister userLister;

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

Notez que le code ci-dessus n'a pas initialisé la variable userLister. Que devrions 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 DB à une autre qui récupère la liste des utilisateurs à partir d'un fichier séparé par des virgules (rappelez-vous, c'est un exemple)? Dans ce cas, je retournerais à mon code et changerais la dernière ligne en:

UserLister userLister = new UserListerCommaSeparatedFile();

Cela n'a aucun problème avec un petit programme comme celui-ci mais ... Ce qui se passe dans un programme qui a des centaines de vues et un nombre similaire de classes d'affaires. La maintenance devient un cauchemar!

L'approche du printemps (injection de dépendances)

Qu'est-ce que le printemps est de câble 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é aux bons endroits (Servlets, Web Frameworks, Business Class, DAO, etc, etc ...).

Pour revenir à l'exemple du printemps, nous avons juste besoin d'un setter pour le userLister champ et avoir 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 classé dans notre classe de vue avec @Inject:

@Inject
private UserLister userLister;

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

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

C'est super! N'est-ce pas?

  • Et si vous voulez utiliser une autre implémentation de votre UserLister interface? Changez simplement le XML
  • Que faire si ne pas avoir UserLister mise en œuvre prête? Programmer une implémentation fictive temporelle de UserLister et faciliter le développement de la vue
  • Que faire si je ne veux plus utiliser Spring? Ne l'utilisez pas! Votre application n'est pas couplée. Inversion de contrôle déclare: "L'application contrôle le framework, pas le framework contrôle l'application".

Il y a d'autres options pour Dependency Injection, ce qui à mon avis a rendu Spring si célèbre en plus de sa simplicité, son élégance et sa stabilité, les gars de SpringSource ont programmé beaucoup de POJOs qui aident à intégrer Spring avec beaucoup d'autres frameworks communs sans être intrusif dans votre application. Aussi Spring a plusieurs bons sous-projets comme Spring MVC, Spring WebFlow, Spring Security et encore une liste de loooong de etceteras.

J'espère que cela t'aides. En tout cas, je vous encourage à lire L'article de Martin Fowler A propos de Dependency Injection et Inversion of Control parce qu'il le fait mieux que moi. Après avoir compris les bases, jetez un oeil à Documentation printanière, à mon avis est  utilisé pour être le meilleur livre de printemps de tous les temps.


610
2018-06-30 16:04



Printemps contient (comme Skaffman 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érez 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 


56
2018-06-30 04:47



Vieux jours, printemps était un cadre d'injection de dépendance fonctionne seulement comme (Guice, PicoContainer, ...), mais maintenant un jour c'est une solution totale pour vous construire 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 on parle de printemps, il faut savoir projet de printemps il parle, est-ce seulement le noyau de printemps, qui est connu comme cadre de printemps, ou c’est d’autres projets printaniers.

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:

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

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

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


25
2018-05-04 05:34



À quoi sert le printemps? Je vais répondre à 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, vous avez juste besoin de changer la ligne de code, comme dans l'approche Spring XML. Mais changer une ligne de code nécessite encore une recompilation par opposition à l'édition de XML que vous dites? Eh bien mon ami difficile, utilisez Ant et le script loin!

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

  1. Les 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 à Uni
  3. Des projets qui ont commencé avec un mauvais design et qui ont besoin d'un patchwork (comme le montre l'exemple de Victor Hugo)

En lire plus: http://discuss.joelonsoftware.com/?joel.3.219431.12


24
2018-06-03 02:14



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
2018-04-29 15:33



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 sympas mais je préfère d'autres choses pour le Web (j'aime beaucoup Tapestry), REST (Jersey est vraiment robuste), etc.


13
2017-12-30 07:14



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

  • Spring MVC, qui avec 2.5+ vous permet d'utiliser les POJO comme classes de contrôleur, ce qui signifie que vous ne devez pas étendre à partir d'un framework particulier (comme dans Struts ou Spring pre-2.5). Les classes de contrôleurs sont aussi simples à tester grâce en partie à l'injection de dépendances
  • Intégration de printemps avec Hibernate, qui simplifie le travail avec cette solution ORM (dans la plupart des cas)
  • L'utilisation de Spring 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 d'Hibernate sont les classes que vous utilisez comme "beans de formulaire". Par nature, cela conduira à un modèle de domaine plus robuste, en partie parce qu'il va réduire le nombre de classes.
  • Les étiquettes de forme de ressort facilitent la création de formulaires sans trop de tracas.

En outre, le printemps est énorme - il y a donc beaucoup d'autres choses que vous pourriez vouloir utiliser dans une application Web comme Spring AOP ou Spring Security. Mais les quatre choses énumérées ci-dessus décrivent les composants communs de Spring qui sont utilisés dans une application Web.


11
2018-06-30 21:35



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, ...


8
2018-01-10 07:55



Le printemps 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 (et a aussi 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 câblera les classes Hibernate dans vos DAO pour vous.

De plus, Spring vous donne essentiellement des configurations solides d'un tas de bibliothèques, et vous guide dans les librairies que vous devriez utiliser.

Le printemps est vraiment un excellent outil. (Je ne parlais pas de Spring MVC, juste le cadre de base).


7
2018-06-30 04:32