2016-05-26 10 views
0

Ich habe ein Modellobjekt oder so genannte POJO-Objekt in meiner Anwendung. Diese Objekte dienen nur zum Speichern von Daten und führen keine Aktionen aus.Initialize POJO Objekt mit Spring

Ich weiß, dass Spring Beans in den meisten Fällen keine POJOs sind. Zum Beispiel deklariere ich DAOs, Service, Controller-Klassen als Spring Beans.

Aber wenn ich das POJO oder sogar ein List-Objekt mit dem neuen Schlüsselwort initialisiere, binde ich es eng an die Implementierungsklasse an.

Wenn jemand später mein POJO erweitert, um eine Membervariable hinzuzufügen, kann er es nicht in die Serviceklassen injizieren.

Ich dachte, den Anwendungskontext zu verwenden, um es zu tun, aber dann bin ich fest, meine Anwendung an Frühling zu koppeln.

Also meine Frage ist

Was ist der beste Weg ist, POJO-Objekt zu initialisieren, dass es später erweiterbar sein kann. Ich bevorzuge es mit der Feder Frühling IOC Container

Antwort

1

Zunächst würde ich nicht so besorgt über die Verknüpfung von Code zu Implementierungsklassen. Sie haben Recht damit, dass IoC flexible Punkte für eine Codebasis bereitstellt (Erweiterung über Änderung). Wenn Sie jedoch kein Framework schreiben, gibt es keinen Grund, das Schlüsselwort new nicht zur Instantiierung eines POJO zu verwenden. Wenn jemand Ihr POJO ausbaut, wird er höchstwahrscheinlich in der Lage sein, die Erweiterung zu den relevanten Diensten hinzuzufügen.

Wenn Sie wirklich Spring verwenden möchten, müssen Sie eine Bean im IoC-Container registrieren. Wenn Sie kein Singleton möchten, können Sie @Scope verwenden, damit Spring jedes Mal, wenn die Bean angefordert wird, eine neue Instanz instanziiert:

@Component 
@Scope("prototype") 
public class Foo { 

}