Rumah  >  Artikel  >  Java  >  Terokai prinsip pelaksanaan pemintas Spring

Terokai prinsip pelaksanaan pemintas Spring

王林
王林asal
2024-01-11 15:18:23586semak imbas

Terokai prinsip pelaksanaan pemintas Spring

Mendedahkan mekanisme pelaksanaan Spring interceptor

Pengenalan

Apabila membangunkan aplikasi web, kita selalunya perlu melakukan operasi tertentu sebelum atau selepas permintaan sampai ke pengawal. Contohnya, sahkan pengguna, rekod log, kendalikan pengecualian, dsb. Rangka kerja Spring memberi kami pemintas (Pemintas) untuk melaksanakan operasi ini Pemintas boleh pra-proses dan permintaan dan respons selepas.

Artikel ini akan menyelidiki mekanisme pelaksanaan pemintas Spring. Kami akan memahami apa itu pemintas, cara ia berfungsi dan menunjukkan cara melaksanakan pemintas tersuai melalui contoh kod tertentu.

Konsep pemintas

Pemintas ialah mekanisme dalam rangka Spring untuk permintaan pra dan pasca pemprosesan. Ia serupa dengan penapis dalam Servlets, tetapi tidak seperti penapis, pemintas adalah berasaskan peringkat kaedah. Ia boleh memintas kaedah dalam Pengawal yang ditentukan dan melaksanakan logik tersuai sebelum dan selepas kaedah itu dilaksanakan. Pemintas boleh membantu kami melaksanakan beberapa pemprosesan umum yang tiada kaitan dengan logik perniagaan dan meningkatkan kebolehgunaan semula dan kebolehselenggaraan kod.

Cara pemintas berfungsi

Pemintas dilaksanakan melalui AOP (Aspect Oriented Programming). Pemintas spring adalah berdasarkan antara muka HandlerInterceptor, yang mentakrifkan tiga kaedah: preHandle, postHandle dan afterCompletion. Aliran kerja khusus adalah seperti berikut:

  1. Apabila pelanggan menghantar permintaan kepada DispatcherServlet, DispatcherServlet akan mencari HandlerMapping yang sepadan berdasarkan URL yang diminta dan mendapatkan HandlerExecutionChain yang sepadan.
  2. HandlerExecutionChain mengandungi satu siri HandlerInterceptor.
  3. DispatcherServlet akan memanggil kaedah preHandle setiap pemintas secara bergilir-gilir dan menyemak nilai pulangan kaedah tersebut.

    • Jika benar dikembalikan, permintaan terus diproses dan memasuki kaedah praHandle pemintas seterusnya.
    • Jika palsu dikembalikan, permintaan akan terganggu di sini dan dikembalikan kepada pelanggan.
  4. Apabila kaedah praHandle semua pemintas kembali benar, DispatcherServlet akan memanggil kaedah handleRequest objek Handler dalam HandlerExecutionChain.
  5. Objek Handler dalam HandlerExecutionChain melaksanakan logik perniagaan dan mengembalikan ModelAndView.
  6. DispatcherServlet akan memanggil kaedah postHandle setiap pemintas secara bergilir-gilir dan memberikan ModelAndView kepada mereka.
  7. Kaedah postHandle pemintas boleh mengubah suai dan meningkatkan ModelAndView.
  8. DispatcherServlet menyerahkan ModelAndView kepada ViewResolver untuk penghuraian dan pemaparan paparan.
  9. Selepas paparan diberikan, DispatcherServlet akan memanggil kaedah afterCompletion setiap pemintas seterusnya untuk membersihkan beberapa sumber.

Pelaksanaan pemintas tersuai

Yang berikut menggunakan contoh khusus untuk menunjukkan cara melaksanakan pemintas tersuai.

public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //  在方法执行之前进行逻辑处理
        System.out.println("拦截器preHandle方法执行");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 在方法执行之后进行逻辑处理
        System.out.println("拦截器postHandle方法执行");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在视图渲染完成后进行逻辑处理
        System.out.println("拦截器afterCompletion方法执行");
    }
}

Dalam kod di atas, kami melaksanakan antara muka HandlerInterceptor dan mengatasi tiga kaedahnya. Dalam kaedah preHandle, kita boleh melakukan beberapa pra-pemprosesan dalam kaedah postHandle, kita boleh mengubah suai dan meningkatkan ModelAndView dalam kaedah afterCompletion, kita boleh melakukan beberapa operasi pembersihan sumber;

Seterusnya, kita perlu mengkonfigurasi pemintas tersuai ke dalam bekas Spring. Ini boleh dicapai melalui konfigurasi atau anotasi XML.

Kaedah konfigurasi XML

Tambah konfigurasi berikut dalam fail konfigurasi Spring:

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <mvc:exclude-mapping path="/login" />
        <bean class="com.example.MyInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>

Dalam konfigurasi di atas, kami menggunakan tag <interceptor></interceptor> untuk mentakrifkan pemintas, dan lulus menentukan laluan URL untuk dipintas. Gunakan teg <exclude-mapping></exclude-mapping> untuk mengecualikan beberapa laluan URL yang tidak perlu dipintas. <interceptor></interceptor>标签来定义拦截器,并通过<mapping></mapping>标签指定要拦截的URL路径。使用<exclude-mapping></exclude-mapping>标签来排除一些不需要拦截的URL路径。

注解方式配置拦截器

在拦截器类上添加@Component注解,并使用@Order

Konfigurasikan pemintas menggunakan anotasi

Tambah anotasi @Component pada kelas pemintas dan gunakan anotasi @Order untuk menentukan susunan pelaksanaan pemintas.

@Component
@Order(1)
public class MyInterceptor implements HandlerInterceptor {
    // 省略代码
}

Tambah konfigurasi berikut dalam kelas konfigurasi Spring:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private MyInterceptor myInterceptor;
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor).addPathPatterns("/**").excludePathPatterns("/login");
    }
}

Dalam konfigurasi di atas, kami menambah pemintas pada pendaftaran pemintas dengan melaksanakan antara muka WebMvcConfigurer dan menulis semula kaedah addInterceptors di dalamnya.

Kesimpulan🎜🎜Melalui artikel ini, kami telah memahami konsep dan prinsip kerja pemintas Spring, dan menunjukkan cara melaksanakan pemintas tersuai melalui contoh kod khusus. Pemintas ialah ciri yang sangat penting dalam rangka kerja Spring, yang boleh membantu kami melaksanakan beberapa logik pemprosesan biasa dan meningkatkan kebolehgunaan semula dan kebolehselenggaraan kod. Saya harap artikel ini dapat membantu pemahaman anda tentang pemintas Spring. 🎜

Atas ialah kandungan terperinci Terokai prinsip pelaksanaan pemintas Spring. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn