Best Practice Application-Config wie handhaben

Bela B.

Aktives Mitglied
Hallo zusammen,

wie würdet ihr denn am besten die Konfiguration für ein Programm lösen?

Also damit mein ich nicht ob JSON, XML, .env, ... sondern wie ihr das im Code abbildet.

Z.b. per Singleton oder Class mit static Methoden oder ganz anders?
 
Kommt auf die Anwendung drum herum an. Wenn irgendeine Art von Dependency-Injection-Framework genutzt wird über dieses, die Konfiguration auf entsprechende Klassen abbilden und als Singleton (nicht Singleton-Pattern) bereitstellen.
 
Ja, bei DI Frameworks mache ich es ebenso wie mrBrown.

Ohne DI Framework mache ich teilweise ein "DI für Arme" - dann habe ich eine kleine ApplicationContext Klasse, die dann sozusagen die Instanzen meiner "Beans" bereit stellt. Also keine Auto Injection über Annotations aber ich habe ein ApplicationContext über den ich meine "Beans" bekomme...
Also über <T> T getBean(Class<T> requiredType) die ja in ApplicationContext bei Spring (oder besser: dem Interface BeanFactory von dem ApplicationContext erbt)

Ob das so eine gute Idee ist / war, weiss ich selbst nicht so sicher. Da würden mich dann Meinungen / Feedback auch interessieren 🙂
Ich war halt bisher vor allem auf dem Backend unterwegs und beim Frontend hatte ich dann auch erst DI mit drin, aber ist ja Unsinn, da massive Frameworks aufzufahren für absoluten Pipifax ...
 
Handelt sich bei mir um meistens normale Anwendungen, also kein Java EE. Im aktuellen Fall geht es bei mir um einen Discord Bot.

Ein DI habe ich aktuell nicht und habe auch noch mit keinem gearbeitet. Gibt es da für Java SE Empfehlungen von euch?
 
Google guice wäre als DI Framework wohl meine Empfehlung. Wenn die Konfiguration aber wirklich das Einzige ist, dann ist es evtl. durchaus angebracht, das entweder per Singleton Pattern zu machen oder einfach eine Instanz zu erzeigen, die dann dahin gereicht wird, wo diese benötigt wird.
 
Handelt sich bei mir um meistens normale Anwendungen, also kein Java EE. [...]
Ein DI habe ich aktuell nicht und habe auch noch mit keinem gearbeitet. Gibt es da für Java SE Empfehlungen von euch?
Die meisten Java-EE-APIs lassen sich auch in normalen Anwendungen nutzen, zB CDI 🙂

Ansonsten gibts noch Guice, Spring, Dagger, ..., die im Prinzip alle geeignet sind.
 
Sisu ist ein weiteres DI-Framework, über welches ich mal gestolpert bin und es interessant fand, da es viel Auto-Configuration übernimmt.
https://www.eclipse.org/sisu/ hat gesagt.:
Sisu uses Google-Guice to perform dependency injection and provide the core JSR330 support, but removes the need to write explicit bindings in Guice modules.
 
Habe mir gerade Guice etwas angeschaut, gefällt mir ganz gut, auch wenn ich noch nicht die ganze Tragweite davon abschätzen kann.

Werde Mal erste Versuche damit
 
Da die meisten (ernsthaften) Programmen doch irgendwann immer größer werden sollte man darüber nachdenken gleich ein Framework zu nutzen. Ich mache alles mit Spring Boot, eine Nummer kleiner wäre CDI mit der RI Weld (http://weld.cdi-spec.org/), was man auch gut für Java SE-Anwendungen nutzen kann.
 
Will mich jetzt wie gesagt mal in Guice einarbeiten, habe da eine Präsentation von zwei Google-Mitarbeitern angeschaut, die mich dann doch überzeugt hat.

Aktuell bin ich noch am Grundgerüst meines Bots bauen.
 
Und schon zu Beginn hänge ich bei Guice.

Soweit ich das bisher verstanden habe, injected Guice automatisch eine Instanz von java.util.Logger, ich benutze allerdings slf4j als Logging-Framework und da speziell Logback.

Wie bringe ich Guice also nun dazu, den Logger zusammen mit dem entsprechenden Class-Name zu injecten?

Für das Config-Interface würde ich dann einen Scope.Singleton verwenden?
 

Zurück
Oben