如何开发一个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方法");
}
}
浙公网安备 33010602011771号