一 、java
博主正在教你們如何開發一個javaEE框架(Jvn框架),博客裏有完整的開發視頻,每一篇博文都是一個知識點,幫助你們理解框架:web
本次內容下載地址:http://pan.baidu.com/s/1hq3sng4spring
1,爲何要使用java的框架,以及框架能帶來什麼好處。 2,幫助大家理解框架的原理。瀏覽器
3,框架是如何實現的。 4,怎樣去開發一個屬於本身的java框架。緩存
二、
目前開發的框架名字叫Jvn框架,本博主的名字:八哥解說,帶領你們入門開發框架。
Jvn框架包含了如下特色:
1,mvc框架,相似StringMvc或者是struts那樣的web框架,今後不在寫servlet,今後不用在web.xml寫servlet配置。mvc
2,orm框架,相似hibernate或者ibatis那樣的框架,今後不在爲複雜的jdbc操做煩惱。框架
3,spring框架,相似spring的框架,今後不在爲bean的管理煩惱;學習
4,cache緩存機制。測試
5,定時調度。spa
6,自動生成在線文檔。
7,攔截器
三、
每一篇博文都有視頻詳細解以及對應的源碼,並且視頻是連續的,想學習Jvn框架是如何開發的,建議從第一篇博文 Jvn入門讀起。
Recall:上節課講到到了如何獲取瀏覽器傳遞過來的參數封裝成咱們的Bean.
這節課咱們來實現:
1,自定義Annotation。
2,實現自定義攔截器。
實現的思路:
首先向定義一個本身的Annotation: aop ,而後再定義一個本身的攔截器Interceptor: JvnInterceptor.定義三個方法 before,after,exception
在通過過濾器的的時候 執行Controller方法以前,調用before,調用以後執行after,出現異常執行exception。
如下是內容的視頻下載地址,以及源碼地址:
http://pan.baidu.com/s/1hq3sng4
Ps:視頻跟代碼都會持續更新,但願你們喜歡,多多支持。
QQ:245223343 永遠的八哥
下面附上我寫的代碼:
這裏是定義的一個Annotation
package com.jvn.annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * 攔截器註解 * @author Administrator * */ @Retention(RetentionPolicy.RUNTIME) public @interface Aop { //攔截器名字 Class interceptor(); }
這是攔截器接口
package com.jvn.core; /** * 攔截器接口 * @author Administrator * */ public interface JvnInterceptor { //執行以前 public void before(); //執行以後 public void after(); //出現異常 public void exception(); }
這裏是我框架調用攔截器的地方
package com.jvn.core; import java.lang.reflect.Method; import javax.management.RuntimeErrorException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.jvn.annotation.Aop; /** * 處理action * @author Administrator * */ public class ActionHandle { /** * 處理 action * @param method * @param controller * @param req * @param resp */ public void handel(String methodName,Class controller,HttpServletRequest req , HttpServletResponse resp){ try { Object obj = controller.newInstance(); /** * 調用 setRequest,setResponse 把req跟resp兩個參數注入進去 */ controller.getMethod("setRequest",HttpServletRequest.class).invoke(obj, req); controller.getMethod("setResponse", HttpServletResponse.class).invoke(obj, resp); Method method = controller.getMethod(methodName, null); /** * 第一步,先看一下 method有沒有@Aop * 第二步,若是有,看一下Clazz是哪一個 * 第三部,建立對象,執行相應方法 */ Aop aop = method.getAnnotation(Aop.class); if(aop!=null){ JvnInterceptor interceptor = (JvnInterceptor) JvnConfig.beanFactory.createSimpleBean(aop.interceptor());
//執行方法以前執行 interceptor.before(); try{ method.invoke(obj, null); }catch(Exception e){
//出現異常 interceptor.exception(); throw new RuntimeException(e); } //執行方法以後執行 interceptor.after(); }else{ method.invoke(obj, null); } } catch (Exception e) { throw new RuntimeException(e); } } }
這是個人測試Controller
package com.everxs.test; import com.jvn.annotation.Aop; import com.jvn.core.JvnController; /** * 用戶管理的Controller * @author Administrator * */ public class UserController extends JvnController{ /** * 刪除一個用戶,這裏用了註解 */ @Aop(interceptor = MyInterceptor.class) public void delete(){ System.out.println("執行了delete方法"); } }