zoukankan      html  css  js  c++  java
  • 如何开发一个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方法");
    	}
    	
    
    }
    

      

  • 相关阅读:
    Android:真机调试遇到的问题(INSTALL_FAILED_CANCELLED_BY_USER和INSTALL_FAILED_INSUFFICIENT_STORAGE)
    tips:Java中的switch的选择因子
    tips:可变参数列表
    tips:Java中while的判断条件
    tips:Java的Random类和Random函数
    tips:Java基本数据类型大小比较
    怎样找到微信小程序功能呢?
    ajax和jquery
    json及JavaBean转json
    JavaBean转xml
  • 原文地址:https://www.cnblogs.com/everxs/p/4533632.html
Copyright © 2011-2022 走看看