Giter VIP home page Giter VIP logo

thunder's Introduction

##Thunder是什么? 一个微型mvc 框架 轻巧,快速为一体。可以用作快速开发原型。

首先向所有开源作者表示尊敬

感谢以下同学的帮助:

王爵

kevin1999 ##Thunder有哪些功能?

  • 集成了轻量级的Aop 动态代理.
  • 集成了轻量级Ioc 不用再为 new 对象的另外一半而烦躁( =new duixiang() )
  • 路由型过滤器,无性能损耗,lamda表达式让你的代码时尚时尚更时尚
  • 集成了轻量级伪ActiveRecord 。对service厌烦的同学在原型里和Service层说88吧!(虽然这样做并不是很好)
  • Restful风格的路由。多路由自动生成。告别重复编程烦恼(目前还是残疾的 后续会优化)。
  • 支持jdk1.6 (AOP 只支持1.8+) 以及更高版本

##最新&准备更新(2016-5-8)

  • 解决了aop 和 路由冲突的问题
  • 解决了资源路由冲突的bug
  • 着手准备build型实体类的注解

##最新更新(2016-4-5)

  • 修复了ioc 和aop 不能共用的问题
  • 添加了一个restful接口(可以更快的生成路由功能)

##有问题反馈 在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

##开始使用 首先clone此源码,可以打包成jar或者直接在项目中使用 创建一个maven webapp 项目 并且在xml中添加如下配置

    <servlet>
        <servlet-name>thunder</servlet-name>
        <servlet-class>com.thunder.web.ThunderDispatcher</servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>lighting</param-name>
            <param-value>App</param-value>
        </init-param>
    </servlet>

在根目录下创建App.java 并且继承lighing接口

public class App implements Lightning{
    @Override
    public void init(Thunder thunder) {
        
     }
}

这样我们第一个thunder应用就完成啦!

##增加路由 我们的应用目前还没有任何路由配置 接下来我们去给应用添加资源以及路由

首先我们增加welcome路由

  public class App implements Lightning{
    @Override
    public void init(Thunder thunder) {
      //这里会增加restful 7条路由
      //get -> /welcome  method:index
      //get -> /welcome/new  method:fresh
      //post -> /welcome/create  method:create
      //put  -> /welcome/:id/update method:update
      //get  -> /welcome/:id/edit   method:edit
      //delete  -> /welcome/:id/delete method:delete
      //get -> /welcome/:id   method:show
      
      //此资源调用welcom类下的方法
      thunder.addResource("welcome",new Welcome()); 
      
      //增加单独一条路由 执行welcome 类下index方法
      thunder.addRoute("/demo", Var.GET,"index",new Welcome());
     }
}

然后我们增加一条过滤路由

      thunder.before("/demo",Var.GET,(request,response)->{
         System.out.print("我拦截demo啦!");
      });

也可以以大家熟悉的注解方式增加路由

@Controller
public class test {

  //IOC 依赖注入
  @Inject
  Util util;

  @Action(value = "/demo",method = "GET")
  //Aop 拦截此方法
  @Check
  public void demo(Request request, Response response){
      System.out.print("hello world");
  }
}

##请求响应 看完以上 增加完路由之后 我们还要给它进行响应 首先我们有一张表单

<form method="post" action="/welcome/create">
<input type="text" name="username" />
<button type="submit">submit</button>
</form>

对应的java Welcome.java 类

public void create(Request request ,Response response){

        User user = (User)request.getModel(User.class);

        System.out.print(user.getUsername());

   }

当提交这个表单 会执行welcome类下的create方法

详见生成resource的注释。

#####如何跳转?

还是刚才那个方法

public void create(Request request ,Response response){

        User user = (User)request.getModel(User.class);

        System.out.print(user.getUsername());
       
        //进行页面渲染
        response.render("/hello");
        
        //进行重定向
        response.redirect_to("/welcome/3");
        
        

   }

######获取参数呢?发送参数呢?

//发送参数
request.sendParams("key",value);
//获取资源id
request.resourceId();
//获取参数
request.params("key");
request.paramsAsInt("key")

##IOC 使用

和spring使用方法大同小异 使用inject 注解即可

//将demo注入容器
@Inject
 Demo demo

##Aop的使用

Aop 通俗理解为动态代理 再通俗一点。就是再执行某件事之前 我要先交给小弟先准备工具

自己再做这件事 如果小弟那边出错 我就不用做了。

首先我们要建立一个注解 当作判断切入点。

现在我们拥有一个@check 注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Check {
}

现在我们要切入加过这个注解的方法

这里就是我们的小弟了

/**要代理的注解类 或注解方法
* 
*/
@Aspect(value = Check.class)
public class Aoptest extends AspectProxy {

/**
 * 重写父类代理方法 对应前置增强 后置增强 环绕增强
 * @param c 对应的代理类
 * @param method 代理执行方法
 * @param params 参数
 * @throws Throwable
 */
public void before(Class<?> c , Method method, Object[] params)throws Throwable{

    System.out.print(" i am in proxy");

}

/**
 * 环绕增强 如果返回true 则进行前后增强  false则只执行被切入方法
 * @param c
 * @param method
 * @param params
 * @return
 * @throws Throwable
 */
public boolean intercept(Class<?> c ,Method method,Object[] params)throws Throwable{
    //返回
    return true;
}

/**
 * 
 * @param c
 * @param method
 * @param params
 * @param o 代理对象
 * @throws Throwable
 */
public void after(Class<?> c ,Method method,Object[] params , Object o)throws Throwable{


}
}

接下来我们在大哥上面加标记(@Check)

@Controller
public class test {

  //IOC 依赖注入
  @Inject
  Util util;

  @Action(value = "/demo",method = "GET")
  //Aop 拦截此方法
  @Check
  public void demo(Request request, Response response){
      System.out.print("hello world");
  }
}

小弟执行顺序为 before -> 大哥方法 -> after

##伪ActiveRecord 首先我们先有一张user表

表结构对应实体类User (名字要对应一致!!!!) 这也是约定>配置的最重要的一点

创建user类之后 我们就可以开始愉快的crud了

  public static void main(String args[]){
      //数据库链接 这一部必须要加在初始化的thunder里。
      DB.open("com.mysql.jdbc.Driver", "jdbc:mysql://127.0.0.1/test", "root", "root");
      User user = new User();
      user.setAge(3);
      user.setId(34);
      user.setPassword("");
      
      Model.select("id","username").list(User.class);
      
      Model.where("id","26").list(User.class);
      //id=25并且根据id排序的user
      Model.where("id","25").orderBy("id").one(User.class);
      
      List<User> users = Model.find_by_sql("select * from user");
      
      Model.find_all(User.class);
      //id大于20的user
      Model.whereGt("id","20").list(User.class);
      
      Model.save(user);
      
      Model.where("id","28").update(user);
      
      //update的数据必须带id 否则会报错
      Model.update(user);
      
      //删除
      Model.delete(1,User.class);
  }
}

##其他

thunder's People

Contributors

100cm avatar ygg-w avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.