Transfuse: Dependency Injection für Android

Transfuse: Dependency Injection für Android

Danny Preußler


Lange gab es nur RoboGuice als ernsthaftes Hilfsmittel, um in Android eine komponentenbasierte Entwicklung mit Inversion of Control (IoC) umzusetzen. Zuletzt erschienen jedoch einige Alternativen am Horizont. SpringSource startete erste Android-Gehversuche, aber auch aus bekannten Mobile-Schmieden wie Square kam ein beachtenswerter Versuch in Form von Dagger.

Das Transfuse-Projekt [1] ist eine weitere Entwicklung, welche viel Aufmerksamkeit bekommen hat. Das Besondere an dem Projekt ist, dass es sich um eine echte Umsetzung des JSR-330 handelt. Was kann Transfuse sonst bieten? Wo stellt es seine Vorgänger vielleicht gar in den Schatten? Wie einige seiner Konkurrenten geht auch Transfuse den Weg der Codegenerierung, wenn das möglich ist. Auf diese Weise holt man sich keinen Performanceverlust durch Reflection in die Anwendung. Auch kommt die App mit weniger Ballast daher, da nur der generierte Code und nicht ein komplexes Framework mit jeder Menge ungenutzter Use Cases ausgeliefert wird. Auf einem Smartphone mit wenig Platz und einer mobilen Datenverbindung mit begrenztem Datenvolumen bleibt das ein wichtiges Thema.

Transfuse versucht die Elemente einer Android-Anwendung und deren Lebenszyklus mit Annotationen auf simplen Java-Objekten zu verstecken. Auf diese Weise wird eine Menge typischer Boilerplate-Code verborgen, aber auch der Einstieg für einen Java-Entwickler in Android erleichtert. Der Unterschied einer einfachen Activity mit und ohne Transfuse spricht hier Bände, wie Listing 1 und 2 zeigen.

Listing 1public class HelloAndroid extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}

Listing 2@Activity@Layout(R.layout.main)public class HelloAndroid {}

Transfuse ist hier im Vergleich zu seinen Mitbewerbern am konsequentesten. Wie man sieht, entfällt selbst das Erben von der Activity-Klasse. Sollte man die Activity-Instanz brauchen, kann man sie sich natürlich auch injizieren:

@Inject Activity activity;

Überhaupt erfolgt alles auf diesem Wege. Was man benötigt, wird injiziert, wie man es von den großen Geschwistern kennt. Das gilt für viele Android-Features, wie beispielsweise die SharedPreferences:

@Inject @Preference(value = "favorite_color", default = "green")String favColor;

Annotationen dienen in diesem Falle auch klar der Lesbarkeit. Einen ClickListener auf einem Button erkennt man mit einer Annotation sehr einfach, wie Listing 3 zeigt.

Listing 3 ...

Transfuse: Dependency Injection für Android

Transfuse: Dependency Injection für Android

Danny Preußler


Lange gab es nur RoboGuice als ernsthaftes Hilfsmittel, um in Android eine komponentenbasierte Entwicklung mit Inversion of Control (IoC) umzusetzen. Zuletzt erschienen jedoch einige Alternativen am Horizont. SpringSource startete erste Android-Gehversuche, aber auch aus bekannten Mobile-Schmieden wie Square kam ein beachtenswerter Versuch in Form von Dagger.

Das Transfuse-Projekt [1] ist eine weitere Entwicklung, welche viel Aufmerksamkeit bekommen hat. Das Besondere an dem Projekt ist, dass es sich um eine echte Umsetzung des JSR-330 handelt. Was kann Transfuse sonst bieten? Wo stellt es seine Vorgänger vielleicht gar in den Schatten? Wie einige seiner Konkurrenten geht auch Transfuse den Weg der Codegenerierung, wenn das möglich ist. Auf diese Weise holt man sich keinen Performanceverlust durch Reflection in die Anwendung. Auch kommt die App mit weniger Ballast daher, da nur der generierte Code und nicht ein komplexes Framework mit jeder Menge ungenutzter Use Cases ausgeliefert wird. Auf einem Smartphone mit wenig Platz und einer mobilen Datenverbindung mit begrenztem Datenvolumen bleibt das ein wichtiges Thema.

Transfuse versucht die Elemente einer Android-Anwendung und deren Lebenszyklus mit Annotationen auf simplen Java-Objekten zu verstecken. Auf diese Weise wird eine Menge typischer Boilerplate-Code verborgen, aber auch der Einstieg für einen Java-Entwickler in Android erleichtert. Der Unterschied einer einfachen Activity mit und ohne Transfuse spricht hier Bände, wie Listing 1 und 2 zeigen.

Listing 1public class HelloAndroid extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}

Listing 2@Activity@Layout(R.layout.main)public class HelloAndroid {}

Transfuse ist hier im Vergleich zu seinen Mitbewerbern am konsequentesten. Wie man sieht, entfällt selbst das Erben von der Activity-Klasse. Sollte man die Activity-Instanz brauchen, kann man sie sich natürlich auch injizieren:

@Inject Activity activity;

Überhaupt erfolgt alles auf diesem Wege. Was man benötigt, wird injiziert, wie man es von den großen Geschwistern kennt. Das gilt für viele Android-Features, wie beispielsweise die SharedPreferences:

@Inject @Preference(value = "favorite_color", default = "green")String favColor;

Annotationen dienen in diesem Falle auch klar der Lesbarkeit. Einen ClickListener auf einem Button erkennt man mit einer Annotation sehr einfach, wie Listing 3 zeigt.

Listing 3 ...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang