spring攔截器的一個簡單例子
今天在SSH中用到spring攔截器,所以先在一個只有spring的測試專案中寫了一個攔截器的一個簡單例子,
結果還遇到了一點小錯誤,一下就按時間發展順序記述.
Purview介面.
- package aop;
- public interface Purview {
- void checkLogin();
- }
PurviesImpl類,Purview介面的實現類.
- package aop;
- public class PurviewImpl implements Purview {
- public void checkLogin() {
- System.out.println("This is checkLogin method!");
- }
- }
PurviewAdvice類,攔截器類.
- package aop;
- import java.lang.reflect.Method;
- import org.springframework.aop.MethodBeforeAdvice;
- public class PurviewAdvice implements MethodBeforeAdvice {
- public void before(Method arg0, Object[] arg1, Object arg2)
- throws Throwable {
- System.out.println("This is before method!");
- }
- }
Test類,測試類.
- package aop;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class Test {
- public static void main(String[] args) {
- // TODO 自動生成方法存根
- ApplicationContext ctx = new ClassPathXmlApplicationContext(
- "applicationContext.xml");
- PurviewImpl purviewImpl = (PurviewImpl) ctx.getBean("purviewImpl");
- purviewImpl.checkLogin();
- }
- }
applicationContext.xml配置檔案.
- <bean id="purviewImpl" class="aop.PurviewImpl"></bean>
- <bean id="purviewAdvice" class="aop.PurviewAdvice"></bean>
- <bean id="purviewAdvisor"
- class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
- <property name="advice">
- <ref local="purviewAdvice" />
- </property>
- <property name="patterns">
- <list>
- <value>.*checkLogin.*</value>
- </list>
- </property>
- </bean>
- <bean id="autoproxyaop"
- class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
- <property name="beanNames">
- <value>purviewImpl</value>
- </property>
- <property name="interceptorNames">
- <list>
- <value>purviewAdvisor</value>
- </list>
- </property>
- </bean>
執行結果報錯,錯誤資訊為:
Exception in thread "main" java.lang.ClassCastException: $Proxy1
at aop.Test.main(Test.java:34)
將Test類中
PurviewImpl purviewImpl = (PurviewImpl) ctx.getBean("purviewImpl");
修改為
Purview purviewImpl = (Purview) ctx.getBean("purviewImpl");
程式執行結果為:
This is before method!
This is checkLogin method!
至此攔截器使用成功!
總結:用spring得到bean的時候,若該類實現了介面,則返回其介面型別的例項,
若直接返回該實現類型別的例項則會報錯,錯誤資訊如上所述.
相關文章
- spring攔截器Spring
- 一個簡單的spring-boot例子Springboot
- Spring MVC 中的攔截器的使用“攔截器基本配置” 和 “攔截器高階配置”SpringMVC
- spring boot 攔截器Spring Boot
- spring mvc 攔截器的使用SpringMVC
- Spring-Context之一:一個簡單的例子SpringContext
- Struts2中攔截器的簡單實現
- Spring Boot新增攔截器Spring Boot
- Axios 的簡單概述以及它的一個核心功能攔截器的詳解iOS
- Spring Boot中攔截器的使用Spring Boot
- Spring 過濾器和攔截器Spring過濾器
- spring mvc攔截器,spring攔截器以及AOP切面的區別和原始碼SpringMVC原始碼
- spring中的過濾器與攔截器Spring過濾器
- 攔截器,攔截器棧總結
- 擼一個簡單的MVVM例子MVVM
- 談談 Spring 的過濾器和攔截器Spring過濾器
- Unity如何連線伺服器: 一個簡單的例子Unity伺服器
- Spring 常用的三種攔截器詳解Spring
- 自定義攔截器,攔截到了某個請求就返回給前端一個JSON串前端JSON
- 一個最簡單的 Github workflow 例子Github
- 一個簡單的觀察者模式例子模式
- 一個簡單的Ajax請求例子
- spring 簡單的使用 Hikari連線池 和 jdbc連線mysql 的一個簡單例子SpringJDBCMySql單例
- SpringMVC攔截器,設定不攔截的URLSpringMVC
- JUnit概述及一個簡單例子單例
- MyBatis攔截器MyBatis
- Mybatis 攔截器MyBatis
- sql攔截器SQL
- Spring AOP 日誌攔截器的事務管理Spring
- 基於原生fetch封裝一個帶有攔截器功能的fetch,類似axios的攔截器封裝iOS
- Spring Boot實戰:攔截器與過濾器Spring Boot過濾器
- WebRTC:一個視訊聊天的簡單例子Web單例
- 一個簡單的例子教會您使用javapJava
- 一個簡單的例子帶你理解HashmapHashMap
- 一個閉包函式的簡單例子函式單例
- Mybatis中的攔截器MyBatis
- 利用責任鏈模式設計一個攔截器模式
- 聊聊如何實現一個帶有攔截器功能的SPI