首页 > 学院 > 开发设计 > 正文

如何开发一个java开源框架-----Jvn框架之实现自定义Annotation以及拦截器(第五讲)

2019-11-15 00:20:55
字体:
来源:转载
供稿:网友
如何开发一个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方法");}}

  


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表