2014-09-03 2 views
0

Ce que j'essaie d'accomplir consiste à injecter un objet de dépôt printanier du contexte à n'importe quel modèle. Il est déjà possible d'appeler n'importe quelle méthode de n'importe où, y compris les modèles, mais "toute méthode" doit être définie comme statique, dans ce cas, à partir du modèle que nous pouvons appeler @ Class.staticMethod(). Je veux faire la même chose mais j'ai besoin de récupérer la "Classe" du contexte de printempsPlayFramework comment injecter un objet à un modèle

Répondre

0

Fondamentalement, tout ce dont vous avez besoin est un localisateur de service avec une méthode statique qui vous permettra de récupérer le bean à partir d'un contexte Spring. Il existe plusieurs façons d'accéder à un contexte Spring à partir d'une méthode statique. Ci-dessous je présente l'un d'entre eux.

@Service 
public class ServiceLocator { 

    @Autowired 
    private static ApplicationContext appContext; 

    @Autowired 
    public ServiceLocator(ApplicationContext appContext) { 
     ServiceLocator.appContext = appContext; 
    } 

    public static <T> T getClassFromSpringContainer(Class<T> clazz) { 
     return appContext.getBean(clazz); 
    } 

} 

Dans une vue, vous pouvez importer cette classe et récupérer n'importe quel bean de votre choix.

@import models.ServiceLocator 
@import models.SampleService 

@ServiceLocator.getClassFromSpringContainer(classOf[SampleService]).sampleMethod() 
+0

Je reçois toujours NullPointerException, car appContext est null. Avant cela, j'ai dû redéfinir getclassFromSpringContainer comme méthode statique, car "getClassFromSpringContainer n'est pas membre de l'objet ServiceLocator" – dwilda

+1

Etes-vous sûr que votre ServiceLocator est géré par Spring? –

+0

Non, ce n'était pas le cas. Merci de votre aide – dwilda

Questions connexes