如何開發一個java開源框架-----Jvn框架之實現自定義Annotation以及攔截器(第五講)


前言

博主正在教大家如何開發一個javaEE框架(Jvn框架),博客里有完整的開發視頻,每一篇博文都是一個知識點,幫助大家理解框架:

本次內容下載地址:http://pan.baidu.com/s/1hq3sng4

1,為什么要使用java的框架,以及框架能帶來什么好處。  2,幫助你們理解框架的原理。

3,框架是如何實現的。                                            4,怎樣去開發一個屬於自己的java框架。


目前開發的框架名字叫Jvn框架,本博主的名字:八哥解說,帶領大家入門開發框架
Jvn框架包含了以下特點:
1,mvc框架,類似StringMvc或者是struts那樣的web框架,從此不在寫servlet,從此不用在web.xml寫servlet配置。

2,orm框架,類似hibernate或者ibatis那樣的框架,從此不在為復雜的jdbc操作煩惱。

3,spring框架,類似spring的框架,從此不在為bean的管理煩惱;

4,cache緩存機制。

5,定時調度。

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方法");
	}
	

}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM