Warum Spring framework, wenn wir erreichen können, lose gekoppelten code über Schnittstellen?

Soweit ich weiß, verwenden wir spring IOC, so dass es leicht wird für Entwickler zum überprüfen der xml-Datei identifizieren und Steuern den Fluss von code, indem Sie die Abhängigkeiten explizit.

Wenn wir aber autowire, Entwickler tatsächlich hat, den code zu überprüfen, um zu identifizieren, welche die Umsetzung ist autowired zu einer bestimmten Klasse

dasselbe erzielt worden wäre, ohne tatsächlich mit spring framework zum Beispiel, also, warum müssen wir die Feder oder was ist der eigentliche Vorteil der Verwendung von Federn in diesem Fall.

Interface Vehicle {
  .....
}

Class Car implements Vehicle {
  ......
}

Class Example {
  Vehicle v = new Car()
}

Oder

Class Example {

  @Autowire
  Vehicle v;
  ....
}

2 Antworten

  • Valerio Vaudi
    30. Juni 2018

    Dies ist eine sehr gute Frage!. Jetzt für die Antwort in der beste Weg, ich denke, dass ein wenig von der story hilft.

    Der Frühling war geboren in der EJB-ära, in der alles konfiguriert wurde, im xml-und im Frühjahr war ursprünglich ein java-framework für die IOC-POJO-basiert. In dieser Zeit wurde ganz normal konfigurieren, unseren Antrag im xml-und im Frühjahr war eine gute Wahl, denn wir können die Vorteile des IOC, ohne die EJB-Komplexität und in einem vendor-freie Weise, EJB-ist nicht vollständig application server frei, weil einige Male der Kreditor-Implementierung, insbesondere für herstellerspezifische Konfiguration bringt die Anwendung nicht absolut tragbar, Frühjahr war ein gelungener Rahmen, da war eine Lösung für fast alle Probleme eine EJB-Anwendung. Dann wird der Erfolg der Rahmen bringt den Rahmen, um zu wachsen und auch andere Funktionen wie data access, web-integration und andere mehr integration und Möglichkeiten.

    In diesem Jahre ist auch die Java ee wächst und in Java ee 6 wurde geboren CDI Frühjahr bieten ein xml, Annotations, java-config, groovy, kotlin dsl-bean-Konfiguration zu erreichen, um Flexibilität und eine komfortable Programmierung und Konfiguration Modell, denken Sie an all die Menschen, die kommen aus JabaEE 6+, die in der Regel durch die Verwendung von @Inject für DI. Jetzt sagte alle diese DI-Fähigkeit, um Ermessen des Entwicklers.

    In meine Meinung mit @Autowired ist gefährlich, da dies bringt Sie die Feder für immer und viele Problem der DI kommt im Fall von mehr als einer bean konfiguriert sind. Zur Durchsetzung der Aufwand der Frühling-team, um Ihnen Komfort und freie Wahl der Konfiguration ab Frühjahr 4.3.x Sie können denken, wie

    interface Vehicle {
    
    }
    
    class Car implements Vehicle {
    }
    
    class Example {
    
        private final Vehicle vehicle;
    
        Example(Vehicle vehicle) {
            this.vehicle = vehicle;
        }
    }
    
    
    @Configuration
    class Config{
    
        @Bean
        public Car car(){
            return new Car();
        }
    
        @Bean
        public Example example(Vehicle car){
            return new Example(car);
        }
    }
    
    @RestController
    class Enpoint{
        private final Example example;
    
        Enpoint(Example example) {
            this.example = example;
        }
    

    die Ihre business code ist jetzt völlig frei von Frühling, auch den Konstruktor auf die rest-controller nicht erforderlich @Autowired annotation, natürlich müssen Sie es konfigurieren.

    Am Ende kann ich sagen, dass Sie verwenden sollten, Spring nicht, weil Frühling bieten IOC, dies kann sein, dies in einer reinen Java-Weise, mit der Google-Saft, Frühling und viele andere IOC-framework, aber ich schlage vor, Sie nutzen Spring, für alle verwandten Projekt, das Ihnen viele Funktionen für die Produktion geeignet wie Spring web für blocking IO, Frühling WebFlux für nicht-blockin-IO -, Spring-Integration für EIP -, Spring batch für Enterprise-ready Batch, Spring Cloud für den Cloud-nativen Anwendung und mehr und mehr, die Kraft des Frühlings zu Tag ist die Flexibilität und Vollständigkeit, natürlich, das Gesetz der Spinne Mann gültig ist! von großen Kräften haben wir eine große Verantwortung. Frühjahr geben Ihnen viele Möglichkeit, aber dann ist der Entwickler die Verantwortung, das beste zu wählen. Anmerkung geben Sie die Geschwindigkeit vor allem während der prototyping-dann aber ist zu starr. Ich hoffe, dass diese lange Reflexion geben Ihnen eine Antwort auf Ihre Zweifel

  • vipin gupta
    4. Mai 2019

    Auf diese Weise, das problem ist, das Fahrzeug "v" ist eng gekoppelt an Auto, jede änderung der output-generator beinhalten kann code ändern. Wenn dieser code verstreut alle über Ihr Projekt, jede änderung des Fahrzeugs werden Sie leiden ernst.