Spring-Konfiguration mit Groovy Bean Configuration

Seit der letzten Version des Spring Frameworks gibt es nun eine vierte Art, die Laufzeitabhängigkeiten zu definieren. Konnte man zu Beginn den Spring Container nur über XML-Dateien konfigurieren, gab es ab Spring 2 auch die Möglichkeit, diese XML-Dateien durch Annotationen an den Klassen deutlich zu entschlacken, und mit Spring 3 kam der Java-basierte Ansatz hinzu. Mit Version 4 kann man jetzt mit der mächtigen Groovy Bean Configuration arbeiten, die die Vorteile beider Ansätze (XML + Java) kombiniert.

So geschieht die Konfiguration der Spring Beans in einem deklarativen Ansatz (wie XML), es handelt sich aber um Groovy-Code mit all seinen Möglichkeiten (Schleifen, Bedingungen, Instanziierung von Objekten, …). Diese neue Konfigurationsart kommt ursprünglich von Grails und wurde vor einiger Zeit nach Spring portiert.

Wenn man Groovy bisher nicht kennt, muss man keine Berührungsängste haben. Das Build-Management-Tool Gradle macht es mit seiner Groovy-DSL vor und ist mittlerweile zu einer ersthaften Konkurrenz für die XML-basierten Platzhirsche Ant und Maven herangewachsen. Als Java-Entwickler fällt ein Umstieg auf Groovy zudem leicht, da die Syntax sehr ähnlich ist.

Ab Spring 4 kann man jetzt also mit der Groovy DSL ganz einfach eine Datasource konfigurieren:

beans {
    dataSource(BasicDataSource) {
        driverClassName = "org.h2.Driver"
        url = "jdbc:h2:mem:myDb"
        username = "sa"
        password = ""
    }
}

In Java-Konfiguration (ab Spring 3) würde das gleiche Beispiel schon aufwendiger sein und deutlich mehr Redundanzen enthalten:

@Configuration
public class DataConfig {
    @Bean
    public DataSource dataSource(){
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setUrl("jdbc:h2:mem:myDb");
        dataSource.setUsername("sa");
        dataSource.setPassword("");
        return dataSource;
    }
}

Auch der klassische XML-basierte Konfigurationsansatz ist nicht deutlich schlanker und strotzt nur so vor Redundanzen. Außerdem entfallen hier programmatische Eingriffe, die mehr Macht und Flexibilität bei der Konfiguration ermöglichen:

<beans>
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="org.h2.Driver" />
    <property name="url" value="jdbc:h2:mem:myDb" />
    <property name="username" value="sa" />
    <property name="password" value="" />
  </bean>
</beans>

Nicht-Groovy-Kenner können schon an diesem einfachen Beispiel die Vorzüge des deklarativen DSL-Ansatzes erkennen. Was man aber nicht sehen kann, sind die vielen weiteren Möglichkeiten, welche die JVM-Allzweckwaffe Groovy theoretisch noch zu bieten hat. Aber darauf werfen wir in einem anderen Blogpost einen Blick.

Interessant ist noch die Frage, ob Spring die Groovy-DSL in späteren Versionen weiter anbieten wird. Anfang des Jahres hatte schließlich die gemeinsame Mutterfirma Pivotal die Unterstützung für das Groovy-Projekt beendet. Da Groovy aber auch noch in anderen Pivotal Projekten zum Einsatz kommt und außerdem ein Open Source-Projekt (mittlerweile bei Apache) ist, brauchen wir da erstmal keine allzu großen Bedenken haben.

Short URL for this post: http://wp.me/p4nxik-1RF
This entry was posted in Groovy and Grails, Spring Universe and tagged , , , . Bookmark the permalink.

Leave a Reply