2016-03-22 9 views
1

In unserem Projekt haben wir Module folgende scout.client, scout.server, scout.shared und backend.Scout Bean Manager: register (..) oder registerBean (..)

backend hat keine Abhängigkeiten zu scout.server und scout.shared, aber scout.server hat Abhängigkeiten backend.

Innerhalb des backend Projekt haben wir alle Business-Logik und ruft alle externen Dienstleistungen.

Wir verwenden die Manager-Scout Bean Instanzen der Backend-Dienste in unserem scout.server zu verwalten:

BEANS.getBeanManager().registerClass(CarService.class); 
BEANS.getBeanManager().registerClass(PartnerService.class); 

Sowohl CarService.class und PartnerService.class sind im backend.

Ist diese Registrierung korrekt? Oder sollte ich die Klassen mit der Methode registerBean(..) anstelle von registerClass(..) registrieren?


Frage von einer fragte other question abgeleitet von @marko-zadravec

Antwort

2

Wie in dem registerClass(..) JavaDoc, wenn Sie das tun:

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); 
    } 
    } 
} 

Dies ist das gleiche wie:

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); 
    } 
    } 
} 

Das bedeutet, dass Sie eine neue Instanz von t erhalten werden er PartnerService bei jedem Anruf BEANS.get(IPartnerService.class). (siehe Bean Scopes in den Scout-Dokumenten).

Wenn Sie Ihr Bean wollen nur eine Instanz für die gesamte Anwendung haben, sollten Sie es so, dass registrieren:

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); 
    } 
    } 
} 

Ich empfehle a specific Order like in this answer nur für Testzwecke zu setzen.

Verwandte Themen