Напоследък, когато използвах слушателя, се сблъсках с проблема, че пружината не може да бъде инжектирана – кодът е следният, тази задача винаги е null, пакетът очевидно е изчистен, но не може да бъде инжектиран.
Причината е следната: слушателят на слушателя не може да инжектира зърното чрез @Resource на Spring контейнера или метода на @Autowired анотация, защото в уеб сървърния контейнер,Нито Servlet, нито Filter, нито Listener се управляват от Spring контейнери,Следователно не можем директно да използваме метода на Spring анотация в тези класове, за да инжектираме нужните ни обекти。 Тук целият жизнен цикъл на сервлета се обработва от контейнера със сервлет. Ако го поставите в Spring контейнер, за да го създадете, обектът servlet може да бъде създаден от Spring контейнера, но контейнерът може да не знае, че сервлетът съществува, защото не е в собствен контейнер. Следователно сервлетът се управлява от уеб сървъра, а не от пружината.
Направете следните модификации:
Взето от контекста на пролетта, това реши проблема перфектно.
|