簡體   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