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:
- Apabila pelanggan menghantar permintaan kepada DispatcherServlet, DispatcherServlet akan mencari HandlerMapping yang sepadan berdasarkan URL yang diminta dan mendapatkan HandlerExecutionChain yang sepadan.
- HandlerExecutionChain mengandungi satu siri HandlerInterceptor.
-
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.
- Apabila kaedah praHandle semua pemintas kembali benar, DispatcherServlet akan memanggil kaedah handleRequest objek Handler dalam HandlerExecutionChain.
- Objek Handler dalam HandlerExecutionChain melaksanakan logik perniagaan dan mengembalikan ModelAndView.
- DispatcherServlet akan memanggil kaedah postHandle setiap pemintas secara bergilir-gilir dan memberikan ModelAndView kepada mereka.
- Kaedah postHandle pemintas boleh mengubah suai dan meningkatkan ModelAndView.
- DispatcherServlet menyerahkan ModelAndView kepada ViewResolver untuk penghuraian dan pemaparan paparan.
- 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 <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
@Component
pada kelas pemintas dan gunakan anotasi @Order
untuk menentukan susunan pelaksanaan pemintas. @Component @Order(1) public class MyInterceptor implements HandlerInterceptor { // 省略代码 }
@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 masukDalam 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. 🎜@Configuration public class WebConfig implements WebMvcConfigurer { @Autowired private MyInterceptor myInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(myInterceptor).addPathPatterns("/**").excludePathPatterns("/login"); } }
Atas ialah kandungan terperinci Terokai prinsip pelaksanaan pemintas Spring. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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.

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

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

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.

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: 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.

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

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.
