繁体   English   中英

理解用于定义 Spring Security bean 的 java 8 lambda 表达式

[英]Understanding java 8 lambda expressions used to define Spring Security beans

@Bean
    public AuthenticationEntryPoint unauthorizedEntryPoint() {
        return (request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
    }

如何理解这个(request, response, authException) -> ,它在哪里找到所有这 3 个变量? 没有在类领域。

它是什么->

AuthenticationEntryPoint是一个函数式接口(一个只包含一个公共方法的接口: commence )。 可以使用 Java Lambda 表达式创建功能接口实现。

在 java 8 之前的编程风格中,您可以使用匿名类

@Bean
public AuthenticationEntryPoint unauthorizedEntryPoint() {
    AuthenticationEntryPoint entryPoint = new AuthenticationEntryPoint() {
        @Override
        public void commence(HttpServletRequest request, HttpServletResponse response,
                AuthenticationException authException) throws IOException, ServletException {
            response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
        }
    };
    return entryPoint;
}

在这里,我们创建了一个AuthenticationEntryPoint匿名类,我们在其中实现了AuthenticationEntryPoint.commence()的行为。

Java 8 lambda 表达式提供了语法糖来将代码简化为:

return (request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED);

request, response, authException将在调用时提供给方法。

更多信息: https : //docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM