攔截器 過濾器的區別

攔截器 過濾器的區別
Spring的攔截器與Servlet的Filter有相似之處,比如二者都是AOP編程思想的體現,
都能實現權限檢查、日誌記錄等。不同的是:
1使用範圍不同:Filter是Servlet規範規定的,只能用於web程序中。而攔截器既
可以用於web程序,也可以用於Application、Swing程序中。
2規範不同:Filter是在Servlet規範中定義的,是Servlet容器支持的。而攔截器是
在Spring容器內的,是Spring框架支持的。
3使用的資源不同:同其他的代碼塊一樣,攔截器也是一個Spring的組件,歸spring
管理,配置在spring文件中,因此能使用Spring裏的任何資源、對象,例如Service
對象、數據源、事務管理等,通過IOC注入到攔截器即可:而Filter則不能。
4深度不同:Filter在只在Servlet前後起作用。而攔截器能夠深入到方法前後、異常
拋出前後等,因此攔截器的使用具有更大的彈性。所以在Spring構架的程序中,
要優先使用攔截器。
5.攔截器是基於java的反射機制的,而過濾器是基於函數回調。
攔截器可以訪問action上下文、值棧裏的對象,而過濾器不能訪問。
6.在action的生命週期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次,
攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,這點很重要,在攔截器裏注入一個service,可以調用業務邏輯。

在spring boot中,如果要修改內置tomcat的配置
要註冊三大組件,使用下面的
* ServletRegistrationBean
* FilterRegistrationBean
* ServletListenerRegistrationBean

如:

 @Bean
     public ServletRegistrationBean myRegBean(){
         ServletRegistrationBean bean=new ServletRegistrationBean(new MyServlet(),"/myservlet");
         return bean;
     }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章