J'utilise Spring MVC pour mon application Web. Mes beans sont écrits dans le spring-servlet.xml
fichier " "
Maintenant, j'ai une classe MyClass
et je veux accéder à cette classe en utilisant Spring Bean
Dans le spring-servlet.xml
j'ai écrit suivant
<bean id="myClass" class="com.lynas.MyClass" />
Maintenant, je dois y accéder en utilisant ApplicationContext
ApplicationContext context = ??
Pour que je puisse faire
MyClass myClass = (MyClass) context.getBean("myClass");
Comment faire ça ??
java
spring
spring-mvc
servlets
LynAs
la source
la source
Réponses:
Injectez-le simplement.
ou implémentez cette interface: ApplicationContextAware
la source
ApplicationContextProvider.java
réponse suivante semble être la solution la plus fiable pour cela.Je pense que ce lien montre le meilleur moyen d'obtenir le contexte d'application n'importe où, même dans la classe non-bean. Je trouve cela très utile. J'espère que c'est la même chose pour vous. Le ci-dessous est le code abstrait de celui-ci
Créer une nouvelle classe ApplicationContextProvider.java
Ajouter une entrée dans application-context.xml
Dans le cas des annotations (au lieu de application-context.xml)
Obtenez le contexte comme celui-ci
À votre santé!!
la source
ApplicationContextProvider.getApplicationContext()
méthode statique . Ensuite, quand il est temps d'avoir besoin du contexte actuel de l'application, j'invoque:ApplicationContextProvider appContext = ApplicationContextProvider.getApplicationContext()
@Component
sur laApplicationContextProvider
configuration peut éviter d'enaplication-context.xml
Au cas où vous auriez besoin d'accéder au contexte depuis un HttpServlet qui lui-même n'est pas instancié par Spring (et donc ni @Autowire ni ApplicationContextAware ne fonctionneront) ...
ou
En ce qui concerne certaines des autres réponses, réfléchissez à deux fois avant de faire ceci:
... comme cela ne vous donne pas le contexte actuel, cela crée plutôt une autre instance de celui-ci pour vous. Ce qui signifie que 1) une partie importante de la mémoire et 2) les beans ne sont pas partagés entre ces deux contextes d'application.
la source
Si vous implémentez une classe qui n'est pas instanciée par Spring, comme un JsonDeserializer, vous pouvez utiliser:
la source
ContextLoader.getCurrentWebApplicationContext()
Ajoutez ceci à votre code
Cela injectera simplement myClass dans votre application
la source
basé sur la réponse de Vivek, mais je pense que ce qui suit serait mieux:
L'écriture d'une méthode d'instance vers un champ statique est une mauvaise pratique et dangereuse si plusieurs instances sont manipulées.
la source
org.springframework.core.io.ContextResource
interface. Je suggérerais de choisir un nom différent pour la classe intérieureContextResource
juste pour éviter le désordre.Il existe de nombreuses façons d'obtenir le contexte de l'application dans l'application Spring. Ceux-ci sont donnés ci-dessous:
Via ApplicationContextAware :
Ici
setApplicationContext(ApplicationContext applicationContext)
, vous obtiendrez l'applicationContextVia Autowired :
Ici, le
@Autowired
mot-clé fournira l'applicationContext.Pour plus d'informations, visitez ce fil
Merci :)
la source
Une autre méthode consiste à injecter applicationContext via un servlet.
Voici un exemple de la façon d'injecter des dépendances lors de l'utilisation des services Web Spring.
Une autre façon consiste à ajouter un contexte d'application dans votre web.xml comme indiqué ci-dessous
En gros, vous essayez de dire au servlet qu'il doit rechercher les beans définis dans ces fichiers de contexte.
la source
Étape 1 : Injectez le code suivant en classe
Étape 2 : Écrivez Getter & Setter
Étape 3 : définir autowire = "byType" dans le fichier xml dans lequel le bean est défini
la source
Même après avoir ajouté @Autowire si votre classe n'est pas un RestController ou une classe de configuration, l'objet applicationContext devenait nul. J'ai essayé de créer une nouvelle classe avec ci-dessous et cela fonctionne bien:
vous pouvez ensuite implémenter une méthode getter dans la même classe selon vos besoins, comme obtenir la référence de classe implémentée en:
la source
Ensuite, vous pouvez récupérer le bean:
Référence: springbyexample.org
la source