注入的 Spring Bean 在 Spring 引导应用程序中为 NULL
Injected Spring Bean is NULL in Spring Boot Application
我正在使用 Spring Boot(1.5.3) 开发 REST Web 服务。为了对传入的请求采取一些措施,我添加了一个如下所示的拦截器。
@Component
public class RequestInterceptor extends HandlerInterceptorAdapter {
@Autowired
RequestParser requestParser;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//HandlerMethod handlerMethod = (HandlerMethod) handler;
requestParser.parse(request);
return true;
}
}
RequestInterceptor
有一个自动装配的 Spring Bean RequestParser
负责解析请求。
@Component
public class RequestParserDefault implements RequestParser {
@Override
public void parse(HttpServletRequest request) {
System.out.println("Parsing incomeing request");
}
}
拦截器注册
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new RequestInterceptor()).addPathPatterns("/usermanagement/v1/**");
}
}
还有我的 Spring 启动应用程序
@SpringBootApplication
public class SpringBootApp {
public static void main(String[] args) {
SpringApplication.run(SpringBootApp.class, args);
}
}
现在当一个请求进来时,它到达 RequestInterceptor
的 preHandle
方法,但是 RequestParser
是 NULL。如果我从 RequestParser
中删除 @Component
注释,我会在 Spring 上下文初始化 No bean found of type RequestParser
期间收到错误消息。这意味着 RequestParser
在 Spring 上下文中注册为 Spring bean 但为什么它在注入时为 NULL?有什么建议么?
你的问题就出在这个new RequestInterceptor()
。
重写您的 WebMvcConfig 以注入它,例如像这样:
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
private RequestInterceptor requestInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(requestInterceptor)
.addPathPatterns("/usermanagement/v1/**");
}
}
我正在使用 Spring Boot(1.5.3) 开发 REST Web 服务。为了对传入的请求采取一些措施,我添加了一个如下所示的拦截器。
@Component
public class RequestInterceptor extends HandlerInterceptorAdapter {
@Autowired
RequestParser requestParser;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//HandlerMethod handlerMethod = (HandlerMethod) handler;
requestParser.parse(request);
return true;
}
}
RequestInterceptor
有一个自动装配的 Spring Bean RequestParser
负责解析请求。
@Component
public class RequestParserDefault implements RequestParser {
@Override
public void parse(HttpServletRequest request) {
System.out.println("Parsing incomeing request");
}
}
拦截器注册
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new RequestInterceptor()).addPathPatterns("/usermanagement/v1/**");
}
}
还有我的 Spring 启动应用程序
@SpringBootApplication
public class SpringBootApp {
public static void main(String[] args) {
SpringApplication.run(SpringBootApp.class, args);
}
}
现在当一个请求进来时,它到达 RequestInterceptor
的 preHandle
方法,但是 RequestParser
是 NULL。如果我从 RequestParser
中删除 @Component
注释,我会在 Spring 上下文初始化 No bean found of type RequestParser
期间收到错误消息。这意味着 RequestParser
在 Spring 上下文中注册为 Spring bean 但为什么它在注入时为 NULL?有什么建议么?
你的问题就出在这个new RequestInterceptor()
。
重写您的 WebMvcConfig 以注入它,例如像这样:
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
private RequestInterceptor requestInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(requestInterceptor)
.addPathPatterns("/usermanagement/v1/**");
}
}