Le printemps 3 recevoir servletContext dans la coutume de haricot

mon problème est que je ne peux pas obtenir de servletcontext dans mon haricot.
J'ai créé personnalisé bean "FileRepository" et j'ai besoin d'obtenir de ServletContext.
voici le code

package com.pc.webstore.utils;

import java.io.File;
import java.nio.file.Files;

import javax.servlet.ServletContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.ServletContextAware;
public class FileRepository implements ServletContextAware {

private ServletContext servletContext;

public String saveFile(File file){
    File tempdir = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
            ...
}

@Override
public void setServletContext(ServletContext servletContext) {
    this.servletContext = servletContext;
    }
}

inscription dans ApplicationContext.xml

 <bean id="fileStorage" class="com.pc.webstore.utils.FileRepository"/>

quand saveFile(Fichier) démarre, j'en attente de la Nullpointerexception parce que servletContext == null.

Alors pourquoi servletcontext n'a pas injecté?
J'ai ContextLoaderListener inscrit dans web.xml

   <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

J'ai trouvé qu'il y a certaines étendues. Peut-être le problème est là. Dites-moi brièvement sur applicationsontext portée ou donner le lien de moyens.
Merci pour l'aide. J'ai passé beaucoup de temps à ce problème.

Après quelques debuging j'ai compris que setServletContexr méthode de servletcontextaware est en fait a été appelé lorsque l'application démarre, mais quand j'ai essayé pour stocker des fichiers avec FileRepository de mon contrôleur, il était déjà anather objet avec la valeur null servletContext champ.

Est-il un moyen juste pour autowier servlet contexte dans ma personnalisé bean quand je veux, comme dans le contrôleur?

Finalement je obtenir servletContext via ServletContextAware. Je change le chemin de la création fileRepository bean. À partir de ce

public String create(@Valid Item item, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest, FileRepository fileRepository)     {

à ce

@Autowired
private FileRepository fileRepository;

@RequestMapping(method = RequestMethod.POST, produces = "text/html")
public String create(@Valid Item item, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) {

OriginalL'auteur yaroslav prokipchyn | 2012-05-19