springboot~HandlerFunction和RouterFunction
HandlerFunction和RouterFunction
RouterFunction為我們應(ying)用(yong)程(cheng)序(xu)添加(jia)一個新的路由(you),這個路由(you)需要綁(bang)定一個HandlerFunction,做為它的處(chu)理程(cheng)序(xu),里面(mian)可(ke)以添加(jia)業務代碼(ma),比如,你添加(jia)一個ImageCodeHandler,用(yong)來(lai)生產(chan)驗證碼(ma)。
- ImageCodeHandler,做為例子,它只返回一個1234的數字
@RequiredArgsConstructor
public class ImageCodeHandler implements HandlerFunction<ServerResponse> {
@Override
public ServerResponse handle(ServerRequest request) throws Exception {
return ServerResponse.status(HttpStatus.OK).contentType(MediaType.TEXT_PLAIN).body("1234");
}
}
- RouterFunctionConfiguration用來注冊一個路由和它的處理程序
proxyBeanMethods配置類是用來指定@Bean注解標注的方法(fa)是否(fou)使用代理,默認是true使用代理,直接從IOC容器之中(zhong)取(qu)得對(dui)象;如果設(she)置為false,也就(jiu)是不使用注解,每(mei)次調用@Bean標注的方法(fa)獲取(qu)到的對(dui)象和IOC容器中(zhong)的都不一樣,是一個新的對(dui)象。
Spring 5.2.0+的版(ban)本(ben),建議你的配置(zhi)類均采用Lite模(mo)式去(qu)做(zuo),即顯(xian)示(shi)設置(zhi)proxyBeanMethods = false。Spring Boot在2.2.0版(ban)本(ben)(依賴(lai)于(yu)Spring 5.2.0)起(qi)就把(ba)它的所有的自(zi)動(dong)配置(zhi)類的此屬性改為了false,即@Configuration(proxyBeanMethods = false),提高Spring啟動(dong)速度
@Configuration(proxyBeanMethods = false)
@RequiredArgsConstructor
public class RouterFunctionConfiguration {
@Bean
public RouterFunction<ServerResponse> routerFunction() {
return RouterFunctions.route(
RequestPredicates.path("/code").and(RequestPredicates.accept(MediaType.TEXT_PLAIN)),
imageCodeHandler());
}
@Bean
public ImageCodeHandler imageCodeHandler() {
return new ImageCodeHandler();
}
}