springboot~HandlerFunction和RouterFunction
HandlerFunction和RouterFunction
RouterFunction為我們應用程序添加一個新的路由,這個路由需要綁定一個HandlerFunction,做為它的處理程序,里面可以添加業務代碼,比如,你添加一個ImageCodeHandler,用來生產驗證碼。
- 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注解標注的方法是否使用代理,默認是true使用代理,直接從IOC容器之中取得對象;如果設置為false,也就是不使用注解,每次調用@Bean標注的方法獲取到的對象和IOC容器中的都不一樣,是一個新的對象。
Spring 5.2.0+的版本,建議你的配置類均采用Lite模式去做,即顯示設置proxyBeanMethods = false。Spring Boot在2.2.0版本(依賴于Spring 5.2.0)起就把它的所有的自動配置類的此屬性改為了false,即@Configuration(proxyBeanMethods = false),提高Spring啟動速度
@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();
}
}
浙公網安備 33010602011771號