반응형
처리기에서 서비스를 자동으로 연결할 수 없음인터셉트어댑터
나는 받는 중입니다.NullPointerException하려고 할 때@Autowire나의@Service:
public class PagePopulationInterceptor extends HandlerInterceptorAdapter {
private @Autowired MyService service;
public @Override void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mav) {
service.savePageView(IPUtils.toLong(request.getRemoteAddr()), request.getRequestURI(), request.getHeader("User-Agent"));
mav.addObject("counter", service.getCounter());
}
}
@Configuration
@ComponentScan(basePackages = "com.mycompany", excludeFilters = { @ComponentScan.Filter(Configuration.class) })
@PropertySource("classpath:application.properties")
@EnableTransactionManagement
@EnableWebMvc
public class MyConfig extends WebMvcConfigurerAdapter {
public @Override void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new PagePopulationInterceptor());
}
}
@Service
@Transactional
public class MyService {
private @Autowired PageViewDao pageViewDao;
public class Counter {
private long total;
private long today;
private long yesterday;
private long now;
// Getters and setters
}
public void savePageView(long ip, String visitPage, String userAgent) {
PageView obj = new PageView();
obj.setVisitDate(new Date());
obj.setUserAgent(userAgent);
obj.setPage(visitPage);
obj.setIp(ip);
pageViewDao.saveOrUpdate(obj);
}
public Counter getCounter() {
Counter ret = new Counter();
// populate Counter members
return ret;
}
}
편집: 스택 추적:
java.lang.NullPointerException
com.mycompany.util.PagePopulationInterceptor.postHandle(PagePopulationInterceptor.java:22)
org.springframework.web.servlet.HandlerExecutionChain.applyPostHandle(HandlerExecutionChain.java:149)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:934)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
스프링이 당신을 관리하지 않기 때문입니다.PagePopulationInterceptor사례.아래 코드에서 직접 작성 중입니다.
public @Override void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new PagePopulationInterceptor());
}
그것을 로 바꿈.
@Bean
public PagePopulationInterceptor pagePopulationInterceptor() {
return new PagePopulationInterceptor();
}
public @Override void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(pagePopulationInterceptor());
}
이러한 방식으로 Spring은 다음과 같은 방식으로 라이프사이클을 관리할 것입니다.PagePopulationInterceptor에서 생성되었기 때문에 인스턴스@Bean방법.봄은 그것을 스캔할 것입니다.@Autowired목표물을 주입합니다.
이는 다음과 같이 가정합니다.PagePopulationInterceptor패키지에 포함되어 있습니다.@ComponentScan편집의
언급URL : https://stackoverflow.com/questions/18218386/cannot-autowire-service-in-handlerinterceptoradapter
반응형
'programing' 카테고리의 다른 글
| Ubuntu의 MariaDB - 특정 버전 (0) | 2023.09.02 |
|---|---|
| 레퍼러를 받을 수 있을까요? (0) | 2023.09.02 |
| 문자열에서 첫 번째 x 문자를 제거하시겠습니까? (0) | 2023.09.02 |
| HTML 전자 메일 스타일 설정 모범 사례 (0) | 2023.09.02 |
| Jquery - Ajax jSON 응답을 변수로 저장 (0) | 2023.09.02 |