Worin besteht der Schaden, wenn eine STATIC-Methode in der Serviceebene erstellt wird - Spring 3

8

Ich weiß, dass es kein bestes Design ist, sondern nur ein Gedanke von einem Spring-Neuling.

Jetzt können wir leicht autowire jede Service-Methode bequem im Spring-Framework miteinander verknüpfen. Aber was ist der Nachteil, wenn man eine statische Factory-Methode der Serviceklasse erstellt und diese überall aufruft?

Es ist ziemlich häufig so:

%Vor%

Aber das sollte auch funktionieren:

%Vor%

Warum gibt es also ein Design wie Autowire? Es sieht schick und wirklich cool aus, aber die dahinter stehende Arbeit erzeugt immer noch eine Service-Bean-Instanz auf einem anderen Service-Objekt.

Ernsthaft, während der Frühling überall auf dem Markt ist, so viele Beiträge und Artikel sprechen über Pros & amp; Renovierungen. Aber garantiert es bessere Leistung (wie mit Autowire anstelle von statischen)?

    
Dreamer 06.11.2012, 17:42
quelle

2 Antworten

13

Dafür gibt es zahlreiche Gründe:

  • Sie können CustomerService nicht leicht durch einen Mock während Tests ersetzen (Tools wie PowerMock beiseite)

  • static Methoden nehmen nicht an standardmäßigen, proxybasierten AOP (keine Transaktionen, Sicherheit, benutzerdefinierte Aspekte)

  • teil
  • Sie können nicht mehr auf raffinierte Injektionstechniken zurückgreifen, wie das Injizieren einer HTTP-Anfrage (Request Scoped) in Singleton-Scoped-Services (schlechtes Design sowieso, aber ...)

Aber um vollständig zu sein, gibt es auch Vorteile:

  • static Methode ist eigentlich näher an Ihrer Absicht, Spring-Beans sind sehr selten statusbehaftet, also brauchen sie nicht wirklich eine Instanz, um zu arbeiten

  • static Aufruf könnte schneller sein (dies ist in 99% der Programme nicht relevant)

Tomasz Nurkiewicz 06.11.2012, 17:50
quelle
4

Was ist, wenn Sie mehrere CustomerService-Komponenten mit unterschiedlicher Konfiguration benötigen? Sie können das nicht mit einer einzigen statischen Methode tun.

Auch wenn es irgendeine Konfiguration auf CustomerService gibt, wie injizieren Sie es? Eine Bohne, die in abhängige Objekte verdrahtet wird, zentralisiert Ihre Konfiguration und verhindert, dass Sie Ihren Code durchsuchen müssen.

    
Alan Krueger 06.11.2012 17:45
quelle

Tags und Links