web-dev-qa-db-fra.com

Printemps et Guice ensemble, ou tout simplement le printemps

Je commence une nouvelle application Web Java à partir de zéro.

Je n'ai pas beaucoup d'expérience sur Spring Framework, mais je sais que j'aimerais utiliser certaines de ses fonctionnalités, telles que la gestion des transaccions.

Par contre, j'aime beaucoup Guice pour l'injection de dépendance.

Je sais que Guice et Spring peuvent travailler ensemble: http://www.jroller.com/mindcrime/entry/an_example_of_integrating_guice

Mais avant de commencer à concevoir mon application, je voulais savoir si quelqu'un avait rencontré des problèmes en suivant cette approche.

De plus, ce que j’aime vraiment chez Guice, c’est que vous n’avez pas besoin d’un fichier de configuration XML, mais simplement de modules Java, plus courts et plus faciles à lire. Existe-t-il une alternative aux fichiers de configuration XML sur Spring, similaire à Guice?

17
csalazar

Je pense que le printemps seul est suffisant pour une application en entreprise.

La dose de printemps a aussi besoin de XML !!! Modern Spring Apps utilise JavaConfig et minimal configuration. Regardez Guides de bottes de printemps . Les applications Whole Spring ne peuvent utiliser aucun code XML.

Guice est gentil, mais très limité. Avec Spring, il est possible d’écrire une application Web ou REST avec des transactions et une persistance très simples et rapides. Avec Guice, c'est plus compliqué.

15
MariuszS

Si vous débutez, je vous recommande d'utiliser https://github.com/spring-projects/spring-boot

Il possède une excellente fonctionnalité de configuration automatique et enregistre le code standard. Je peux même vous libérer de l'utilisation du serveur d'applications grâce à Tomcat intégré. Par exemple, implémenter un contrôleur MVC simple (qui peut être utilisé en tant que points de terminaison REST) ressemble à ceci:

@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleController.class, args);
    }
}

Maintenant, vous pouvez exécuter Java -jar your_package.jar et c'est tout. Vous obtiendrez également la gestion des transactions, l'intégration de la base de données, etc. D'autres exemples sont disponibles dans le lien mentionné, notamment dans https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples répertoire

11
Jakub Kubrynski

Spring a maintenant une configuration d'annotation basée sur Java pour deux versions majeures. Vous n'avez pas besoin d'écrire une seule ligne de XML (pas même un web.xml!)

J'ai travaillé avec Guice et Spring. Guice est suffisant pour les petits projets nécessitant une ID, mais si vous envisagez d’utiliser Spring pour le support MVC ou transactionnel, vous pouvez également utiliser son ID. De plus, Guice n’a pas un support de profil aussi efficace que Spring. Vous devez effectuer votre propre commutation manuelle des modules si vous souhaitez disposer de beans distincts pour le développement local, les environnements de test et la production.

6
Tom G

Google Guice a presque un mappage 1: 1 pour tous les concepts d'injection Spring Dependency Injection, mais il possède quelques fonctionnalités supplémentaires:

1. Tout est en Java. Google Guice contient toutes les configurations en code Java, nous n’avons donc pas à nous préoccuper de la configuration xml.

2. Meilleurs messages d'erreur. Guice a un intercepteur qui nettoie et retranscrit des traces de pile plus jolies. Le printemps crache tout.

3. Liaison juste-à-temps (ou liaison implicite) . Cela signifie que si vous avez un constructeur zero-arg, aucune liaison supplémentaire n'est nécessaire, il vous suffit de l'injecter! Idem si vous essayez d'injecter un constructeur avec plusieurs arguments qui sont soit des constructeurs zéro argument, soit déjà injectés, aucune configuration supplémentaire n'est nécessaire. Encore une fois, il suffit de l'injecter!

4. Eager/Lazy injection Lorsque vous injectez avec Spring, il est dit que je n’injecterai rien ou tout. Dans Guice, il est possible d’injecter paresseusement, ce qui signifie que vous ne créez que la sous-section du graphe de dépendance dont j'ai besoin. Cela signifie quelques choses - vous n'avez pas besoin de ces fichiers de tests printaniers spéciaux étranges, Guice injecte beaucoup plus rapidement dans les tests et vous pouvez exécuter des tests d'intégration dans Eclipse avec une configuration minimale, voire nulle!

5. Reliure par types. Ceci est différent de Spring, qui se lie par des noms. Au printemps, si vous associez accidentellement deux instances au même nom, Spring échouera en silence et vous confondra encore plus en prenant la liaison qui est venue en dernier (yech). Spring propose une option "bind by type", mais ne vous laissez pas berner - son implémentation sous-jacente est toujours une chaîne.

Source: https://github.com/google/guice

2
Ashish Khandelwal

Je vous suggère également de jeter un coup d'œil à HK2 pour un moteur J2SE DI léger. Il est similaire à Guice et CDI et possède de nombreuses fonctionnalités d'extensibilité qui pourraient vous intéresser. Il fonctionne également avec Guice et Spring via des ponts bidirectionnels. Vous pouvez commencer à apprendre sur HK2 ici: http://hk2.Java.net/ . Vous trouverez des informations sur le pont de Guice à l'adresse: https://hk2.Java.net/2.2.0-b27/guice-bridge.html . Les informations sur le pont de Spring se trouvent ici: https://hk2.Java.net/2.2.0-b27/spring-bridge.html .

Le choix du fournisseur DI à utiliser dépend en grande partie des fonctionnalités spéciales requises par votre application.

0
jwells131313