问题
In our project we have following modules scout.client, scout.server, scout.shared and backend.
backend has no dependencies to scout.server and scout.shared, but scout.server has dependencies to backend.
Inside the backend project we have all business logic and calling all outside services.
We use the Scout Bean Manager to manage the instances of the Backend-Services in our scout.server:
BEANS.getBeanManager().registerClass(CarService.class);
BEANS.getBeanManager().registerClass(PartnerService.class);
Both, CarService.class and PartnerService.class are in the backend.
Is this registration correct? Or should I register the classes using the registerBean(..) method instead of registerClass(..)?
Question derived from an other question asked by @marko-zadravec
回答1:
As explained in the registerClass(..) JavaDoc, if you do:
public class RegisterBeansListener implements IPlatformListener {
@Override
public void stateChanged(PlatformEvent event) {
if (event.getState() == IPlatform.State.BeanManagerPrepared) {
// register the class directly:
BEANS.getBeanManager().registerClass(BeanSingletonClass.class);
}
}
}
This is the same as:
public class RegisterBeansListener implements IPlatformListener {
@Override
public void stateChanged(PlatformEvent event) {
if (event.getState() == IPlatform.State.BeanManagerPrepared) {
// register with meta information
BeanMetaData beanData = new BeanMetaData(PartnerService.class);
BEANS.getBeanManager().registerBean(beanData);
}
}
}
Meaning that you will get a new instance of the PartnerService each time you call BEANS.get(IPartnerService.class). (see Bean Scopes in the Scout Docs).
If you want your bean to have only one instance for your entire application you should register it like that:
public class RegisterBeansListener implements IPlatformListener {
@Override
public void stateChanged(PlatformEvent event) {
if (event.getState() == IPlatform.State.BeanManagerPrepared) {
// register with meta information
BeanMetaData beanData = new BeanMetaData(PartnerService.class)
.withApplicationScoped(true);
BEANS.getBeanManager().registerBean(beanData);
}
}
}
I recommend setting a specific Order like in this answer only for test purpose.
来源:https://stackoverflow.com/questions/36164077/scout-bean-manager-registerclass-or-registerbean