Google Guice – Scopes

Google Guice – Scopes

Guice returns a new instance every time it supplies a value as
its default behavior. It is configurable via scopes. The various
scopes that Guice supports are −
  • @Singleton − Single instance for lifetime of the
    application. @Singleton object needs to be threadsafe.
  • @SessionScoped − Single instance for a particular
    session of the web application. @SessionScoped object needs
    to be threadsafe.
  • @RequestScoped − Single instance for a particular
    request of the web application. @RequestScoped object does
    not need to be threadsafe.

Application of Scopes

You can apply scopes in the following ways −

At Class level

@Singleton
class SpellCheckerImpl implements SpellChecker {
public SpellCheckerImpl(){}

@Override
public void checkSpelling() {
System.out.println("Inside checkSpelling." );
}
}

At Configuration level

bind(SpellChecker.class).to(SpellCheckerImpl.class).in(Singleton.class);

At Method level

@Provides @Singleton
public SpellChecker provideSpellChecker() {
String dbUrl = "jdbc:mysql://localhost:5326/emp";
String user = "user";
int timeout = 100;

SpellChecker SpellChecker = new SpellCheckerImpl(dbUrl, user, timeout);
return SpellChecker;
}

Example

Let’s see the Scope at class level in action.

Result With @Singleton Annotation

Create a java class named GuiceTester.
GuiceTester.java
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Singleton;

public class GuiceTester {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new TextEditorModule());
SpellChecker spellChecker = new SpellCheckerImpl();
injector.injectMembers(spellChecker);

TextEditor editor = injector.getInstance(TextEditor.class);
System.out.println(editor.getSpellCheckerId());

TextEditor editor1 = injector.getInstance(TextEditor.class);
System.out.println(editor1.getSpellCheckerId());
}
}
class TextEditor {
private SpellChecker spellChecker;

@Inject
public void setSpellChecker(SpellChecker spellChecker) {
this.spellChecker = spellChecker;
}
public TextEditor() { }

public void makeSpellCheck() {
spellChecker.checkSpelling();
}
public double getSpellCheckerId() {
return spellChecker.getId();
}
}

//Binding Module
class TextEditorModule extends AbstractModule {
@Override

protected void configure() {
bind(SpellChecker.class).to(SpellCheckerImpl.class);
}
}
interface SpellChecker {
public double getId();
public void checkSpelling();
}
@Singleton
class SpellCheckerImpl implements SpellChecker {
double id;

public SpellCheckerImpl() {
id = Math.random();
}
@Override
public void checkSpelling() {
System.out.println("Inside checkSpelling." );
}
@Override
public double getId() {
return id;
}
}
Now, compile and run the file, you can see the following output
with same numbers.
0.3055839187063575
0.3055839187063575

Result Without @Singleton Annotation

Create a java class named GuiceTester.
GuiceTester.java
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;

public class GuiceTester {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new TextEditorModule());
SpellChecker spellChecker = new SpellCheckerImpl();
injector.injectMembers(spellChecker);

TextEditor editor = injector.getInstance(TextEditor.class);
System.out.println(editor.getSpellCheckerId());

TextEditor editor1 = injector.getInstance(TextEditor.class);
System.out.println(editor1.getSpellCheckerId());
}
}
class TextEditor {
private SpellChecker spellChecker;

@Inject
public void setSpellChecker(SpellChecker spellChecker) {
this.spellChecker = spellChecker;
}
public TextEditor() { }

public void makeSpellCheck() {
spellChecker.checkSpelling();
}
public double getSpellCheckerId() {
return spellChecker.getId();
}
}

//Binding Module
class TextEditorModule extends AbstractModule {
@Override

protected void configure() {
bind(SpellChecker.class).to(SpellCheckerImpl.class);
}
}
interface SpellChecker {
public double getId();
public void checkSpelling();
}
class SpellCheckerImpl implements SpellChecker {
double id;

public SpellCheckerImpl() {
id = Math.random();
}
@Override
public void checkSpelling() {
System.out.println("Inside checkSpelling." );
}
@Override
public double getId() {
return id;
}
}

Output

Now, compile and run the file. You can see the following output
with different numbers −
0.556007079571739
0.22095011760351602

Comments

Popular posts from this blog

Mad Scientist Profits Review – A Legit Method To Make Money Online

Targeting Academy 2.0 (2019) Review

Holiday SocialPacks Review – Cash In By Helping People Fight Against Corporations