2014-02-17 6 views
0

В HomeController я делаю следующееВызов метода службы из не класса контроллера

@Controller 
public class HomeController { 

    @Autowired 
    private EUserService userDao; 

    @RequestMapping(value = "/") 
    public String setupForm(Map<String, Object> map) { 
     User user=(User)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
     EUser currentUser = userDao.findUserByName(user.getUsername()); 
      System.out.println(currentUser.getUserName()); 
     } 
} 

Он прекрасно работает и показывает мне выход правильно. Теперь если я делаю то же самое в не класс типа контроллера, как следующий

public class Utility { 
    @Autowired 
    private EUserService userDao; 

    public void getLoggedUser() { 
     User user = (User) SecurityContextHolder.getContext() 
       .getAuthentication().getPrincipal(); 
     EUser currentUser = (EUser) userService.findUserByName(user 
       .getUsername()); 
     System.out.println(currentUser.getUserName()); 

    } 
} 

это дает мне следующее NullPointerException

SEVERE: Servlet.service() for servlet [spring] in context with path [/Ebajar] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause 
java.lang.NullPointerException 

Как это исправить ??

+0

Какова была строка, которая выбрала 'NullPointerException'? –

ответ

1

Проблема не в том, что вы вызываете это не от контроллера. Проблема в том, что вы вызываете это из класса, который не управляется Spring, поэтому здесь не вводится userDao.

Он считает, что «правильное» решение состоит в том, чтобы превратить вашу утилиту в Spring bean, например. обозначив его как @Service и назовите его через Spring. В качестве альтернативы вы можете запрограммировать его с помощью ApplicationContext.getBean() (см. here).

1

вы должны объявить/аннотировать свой класс Utility в качестве весеннего боба, чтобы другие компоненты были введены. в этом случае это EUserService

попробуйте добавить @Component в ваш Utility класс. Я предположил, что ваш пакет задействован в параметрах настройки параметров фасованного звука.

+0

«Я предположил, что ваш пакет задействован в настройках сканирования фасованных пружин». что это значит? – LynAs

+1

@LynAs это означает, что ваш пакет должен быть включен в конфигурацию сканирования аннотированных фанов весны. Если вы добавите '@ Component' или' @ Service' – Kent

1

Только управляемый весом источник может автоподключить экземпляр. Read here

Вы комментируете Утилиту с @Component.

Смежные вопросы