Jadual Kandungan
Pengenalan
Konsep pemintas
Cara pemintas berfungsi
Pelaksanaan pemintas tersuai
Kaedah konfigurasi XML
注解方式配置拦截器
Rumah Java javaTutorial Terokai prinsip pelaksanaan pemintas Spring

Terokai prinsip pelaksanaan pemintas Spring

Jan 11, 2024 pm 03:18 PM
spring Mekanisme pelaksanaan pemintas

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方法执行");
    }
}
Salin selepas log masuk

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>
Salin selepas log masuk

Dalam konfigurasi di atas, kami menggunakan tag <mvc:interceptor> untuk mentakrifkan pemintas, dan lulus < Teg kod><mvc:mapping> menentukan laluan URL untuk dipintas. Gunakan teg <mvc:exclude-mapping> untuk mengecualikan beberapa laluan URL yang tidak perlu dipintas. <mvc:interceptor>标签来定义拦截器,并通过<mvc:mapping>标签指定要拦截的URL路径。使用<mvc: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 {
    // 省略代码
}
Salin selepas log masuk

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");
    }
}
Salin selepas log masuk
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 Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Paradigma pengaturcaraan baharu, apabila Spring Boot bertemu OpenAI Paradigma pengaturcaraan baharu, apabila Spring Boot bertemu OpenAI Feb 01, 2024 pm 09:18 PM

Pada tahun 2023, teknologi AI telah menjadi topik hangat dan memberi impak besar kepada pelbagai industri, terutamanya dalam bidang pengaturcaraan. Orang ramai semakin menyedari kepentingan teknologi AI, dan komuniti Spring tidak terkecuali. Dengan kemajuan berterusan teknologi GenAI (General Artificial Intelligence), ia menjadi penting dan mendesak untuk memudahkan penciptaan aplikasi dengan fungsi AI. Dengan latar belakang ini, "SpringAI" muncul, bertujuan untuk memudahkan proses membangunkan aplikasi berfungsi AI, menjadikannya mudah dan intuitif serta mengelakkan kerumitan yang tidak perlu. Melalui "SpringAI", pembangun boleh membina aplikasi dengan lebih mudah dengan fungsi AI, menjadikannya lebih mudah untuk digunakan dan dikendalikan.

Gunakan Spring Boot dan Spring AI untuk membina aplikasi kecerdasan buatan generatif Gunakan Spring Boot dan Spring AI untuk membina aplikasi kecerdasan buatan generatif Apr 28, 2024 am 11:46 AM

Sebagai peneraju industri, Spring+AI menyediakan penyelesaian terkemuka untuk pelbagai industri melalui API yang berkuasa, fleksibel dan fungsi lanjutannya. Dalam topik ini, kami akan menyelidiki contoh aplikasi Spring+AI dalam pelbagai bidang Setiap kes akan menunjukkan cara Spring+AI memenuhi keperluan khusus, mencapai matlamat dan meluaskan LESSONSLEARNED ini kepada rangkaian aplikasi yang lebih luas. Saya harap topik ini dapat memberi inspirasi kepada anda untuk memahami dan menggunakan kemungkinan Spring+AI yang tidak terhingga dengan lebih mendalam. Rangka kerja Spring mempunyai sejarah lebih daripada 20 tahun dalam bidang pembangunan perisian, dan sudah 10 tahun sejak versi Spring Boot 1.0 dikeluarkan. Sekarang, tiada siapa boleh mempertikaikan Spring itu

Apakah kaedah pelaksanaan transaksi program musim bunga? Apakah kaedah pelaksanaan transaksi program musim bunga? Jan 08, 2024 am 10:23 AM

Cara melaksanakan transaksi terprogram musim bunga: 1. Gunakan TransactionTemplate 2. Gunakan TransactionCallback dan TransactionCallbackWithoutResult 3. Gunakan anotasi Transaksional;

Menyahmistifikasi mekanisme pemintas di Golang Menyahmistifikasi mekanisme pemintas di Golang Apr 08, 2024 am 08:39 AM

Pemintas ialah corak reka bentuk yang membolehkan gelagat tersuai disisipkan sebelum dan selepas pelaksanaan kaedah Dalam Go, ia boleh dilaksanakan melalui perisian tengah net/http. Ia mempunyai kelebihan kebolehskalaan, kebolehgunaan semula, kebolehujian, dsb., dan boleh digunakan dalam senario seperti pengesahan, kebenaran, caching, pengelogan dan pengendalian ralat tersuai.

7 anotasi yang paling biasa digunakan dalam Spring, organisasi paling berkuasa dalam sejarah! 7 anotasi yang paling biasa digunakan dalam Spring, organisasi paling berkuasa dalam sejarah! Jul 26, 2023 pm 04:38 PM

Dengan kemas kini dan lelaran teknologi, Java5.0 mula menyokong anotasi. Sebagai rangka kerja terkemuka di Java, spring perlahan-lahan mula meninggalkan konfigurasi xml sejak ia dikemas kini kepada versi 2.5, dan lebih banyak anotasi digunakan untuk mengawal rangka kerja spring.

Cara menetapkan tahap pengasingan transaksi dalam Spring Cara menetapkan tahap pengasingan transaksi dalam Spring Jan 26, 2024 pm 05:38 PM

Cara menetapkan tahap pengasingan transaksi dalam Spring: 1. Gunakan anotasi @Transactional 2. Tetapkan dalam fail konfigurasi Spring 3. Gunakan PlatformTransactionManager 4. Tetapkan dalam kelas konfigurasi Java. Pengenalan terperinci: 1. Gunakan anotasi @Transactional, tambah anotasi @Transactional pada kelas atau kaedah yang memerlukan pengurusan transaksi dan tetapkan tahap pengasingan dalam atribut 2. Dalam fail konfigurasi Spring, dsb.

Anotasi Musim Bunga Didedahkan: Analisis Anotasi Biasa Anotasi Musim Bunga Didedahkan: Analisis Anotasi Biasa Dec 30, 2023 am 11:28 AM

Spring ialah rangka kerja sumber terbuka yang menyediakan banyak anotasi untuk memudahkan dan meningkatkan pembangunan Java. Artikel ini akan menerangkan anotasi Spring yang biasa digunakan secara terperinci dan memberikan contoh kod khusus. @Autowired: Autowired @Autowired anotasi boleh digunakan untuk wayar secara automatik dalam bekas Spring. Apabila kami menggunakan anotasi @Autowired di mana kebergantungan diperlukan, Spring akan mencari kacang yang sepadan dalam bekas dan menyuntiknya secara automatik. Kod sampel adalah seperti berikut: @Auto

Penggunaan rangka kerja ujian unit JUnit dalam projek Spring Penggunaan rangka kerja ujian unit JUnit dalam projek Spring Apr 18, 2024 pm 04:54 PM

JUnit ialah rangka kerja ujian unit Java yang digunakan secara meluas dalam projek Spring dan boleh digunakan dengan langkah berikut: Tambah kebergantungan JUnit: org.junit.jupiterjunit-jupiter5.8.1test Tulis kes ujian: Gunakan @ExtendWith(SpringExtension.class) untuk mendayakan sambungan, gunakan @Autowired inject beans, gunakan @BeforeEach dan @AfterEach untuk menyediakan dan membersihkan, dan tandakan kaedah ujian dengan @Test.

See all articles