Singleton scope

If we want to create only one instance of the class, then the @Singleton annotation can be used to mark the implementation class. As long as a the singleton object lives, the injector lives in context, but in the same application, it is possible to have multiple injectors, and in that case, each injector is associated with a different instance of a singleton-scoped object:

@Singleton
public class DatabaseConnection{

public void connectDatabase(){
}

public void disconnectDatabase(){
}
}

Another way to configure a scope is by using a bind statement in the module:

public class ApplicationModule extends AbstractModule{

@Override
protected void configure() {
//bind service to implementation class
bind(NotificationService.class).to(SMSService.class).in(Singleton.class);
}

}

When we use linked binding in a module, then the scope only applies to binding the source, not to the target. For example, we have a class UserPref that implements both Professor and Student interfaces. This will create two instance of type: one for Professor and another one for Student:

bind(Professor.class).to(UserPref.class).in(Singleton.class);
bind(Student.class).to(UserPref.class).in(Singleton.class);

This is because the singleton scope applies at the binding type level, which is Professor and Student, not at the target type, UserPref.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.144.30.236