Mobile

Android – Injeção de dependência com RoboGuice (Parte 4)

 

Antes de iniciar a leitura deste post, confira os anteriores em: https://www.redspark.io/?p=6325, https://www.redspark.io/?p=6341 e https://www.redspark.io/?p=6349.

Continuando o tópico iniciado no post anterior, neste post eu demonstrarei como utilizar o @Named do RoboGuice, que é equivalente ao @Qualifier, do Spring.

 

Utilizando o mesmo cenário definido no post anterior, precisamos apenas definir a seguinte configuração na nossa classe MyModules:
 

[cc lang=”java”]
package br.com..configurations;

import br.com..service.IMyService;
import br.com..service.impl.MyNEWService;

import com.google.inject.AbstractModule;
import com.google.inject.name.Names;

/**
* @author lucas.oliveira
*
*/
public class MyModules extends AbstractModule {

/*
* (non-Javadoc)
*
* @see com.google.inject.AbstractModule#configure()
*/
@Override
protected void configure() {

bind(IMyService.class).annotatedWith(Names.named(“new”)).to(MyNEWService.class);
}
}
[/cc]
 

E as anotações de injeção de dependência ficam da seguinte forma:

[cc lang=”java”]
package br.com.;

import roboguice.activity.RoboActivity;
import roboguice.inject.ContentView;
import roboguice.inject.InjectView;
import android.os.Bundle;
import android.widget.TextView;
import br.com..service.IMyService;

import com.google.inject.Inject;
import com.google.inject.name.Named;

@ContentView(R.layout.main)
public class HelloAndroidActivity extends RoboActivity {

@Inject
@Named(“new”)
private IMyService service;

// Implementação da classe…

}
[/cc]

 

Por padrão, o RoboGuice cria uma nova instância toda vez que é requisitado. Este comportamento pode não ser desejável em algumas aplicações. Para isso, podemos dizer que nossas dependências são Singletons, ou seja, devem ser criadas apenas uma vez. Temos diversas maneiras de realizar isto:

Uma delas é a utilização da anotação @Singleton diretamente:
[cc lang=”java”]
@ContentView(R.layout.main)
public class HelloAndroidActivity extends RoboActivity {

@Inject
@Singleton
@Named(“new”)
private IMyService service;

// Implementação da classe…

}
[/cc]
 
Outra forma é a descrição na própria classe MyModules:
[cc lang=”java”]
package br.com..configurations;

import br.com..service.IMyService;
import br.com..service.impl.MyNEWService;

import com.google.inject.AbstractModule;

/**
* @author lucas.oliveira
*
*/
public class MyModules extends AbstractModule {

/*
* (non-Javadoc)
*
* @see com.google.inject.AbstractModule#configure()
*/
@Override
protected void configure() {

bind(IMyService.class).to(NewService.class).asEagerSingleton();
}
}
[/cc]


Este foi mais um post da série Android, espero que tenham gostado. Quaisquer dúvidas, sugestões e/ou reclamações, comentem!

_________________________________________

Lucas Oliveira – Analista Programador na redspark.
Bacharel em Sistemas de Informação pela Universidade de São Paulo.
@OliveiraLima_

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Compartilhe isso: