All Projects → 100cm → Thunder

100cm / Thunder

Programming Languages

java
68154 projects - #9 most used programming language

Labels

Projects that are alternatives of or similar to Thunder

thinking-in-spring
Spring source code reading
Stars: ✭ 105 (+50%)
Mutual labels:  ioc, aop
Java Bible
🍌 我的技术摘要
Stars: ✭ 2,919 (+4070%)
Mutual labels:  ioc, aop
CNeptune
CNeptune improve productivity & efficiency by urbanize .net module with meta-code to lay foundation for frameworks
Stars: ✭ 30 (-57.14%)
Mutual labels:  ioc, aop
LSFramework
手写山寨版spring学习aop、ioc思想的demo,没看过spring的源码,因为实在是太庞大了,参考部分网上博客及开源代码完成。
Stars: ✭ 53 (-24.29%)
Mutual labels:  ioc, aop
Spring Learning
Spring 学习笔记,通过例子展示和剖析实现机制
Stars: ✭ 346 (+394.29%)
Mutual labels:  ioc, aop
tiny4j
IOC, AOP, REST...
Stars: ✭ 15 (-78.57%)
Mutual labels:  ioc, aop
java-bible
🍌 我的技术摘要
Stars: ✭ 2,950 (+4114.29%)
Mutual labels:  ioc, aop
Uioc
IoC Framework for us
Stars: ✭ 112 (+60%)
Mutual labels:  ioc, aop
Summer
这是一个支持分布式和集群的java游戏服务器框架,可用于开发棋牌、回合制等游戏。基于netty实现高性能通讯,支持tcp、http、websocket等协议。支持消息加解密、攻击拦截、黑白名单机制。封装了redis缓存、mysql数据库的连接与使用。轻量级,便于上手。
Stars: ✭ 336 (+380%)
Mutual labels:  ioc, aop
Martian
🎨 Martian 是一个基于NIO的JavaWeb编程框架,可以帮助你快速的开发后端服务
Stars: ✭ 320 (+357.14%)
Mutual labels:  ioc, aop
hasor
Hasor是一套基于 Java 语言的开发框架,区别于其它框架的是 Hasor 有着自己一套完整的体系,同时还可以和先有技术体系做到完美融合。它包含:IoC/Aop容器框架、Web框架、Jdbc框架、RSF分布式RPC框架、DataQL引擎,等几块。
Stars: ✭ 938 (+1240%)
Mutual labels:  ioc, aop
Hasor
Hasor是一套基于 Java 语言的开发框架,区别于其它框架的是 Hasor 有着自己一套完整的体系,同时还可以和先有技术体系做到完美融合。它包含:IoC/Aop容器框架、Web框架、Jdbc框架、RSF分布式RPC框架、DataQL引擎,等几块。
Stars: ✭ 713 (+918.57%)
Mutual labels:  ioc, aop
Nutz
Nutz -- Web Framework(Mvc/Ioc/Aop/Dao/Json) for ALL Java developer
Stars: ✭ 2,422 (+3360%)
Mutual labels:  ioc, aop
Farseer.Net
Provides consistent standard use of common components of the .Net Core language
Stars: ✭ 42 (-40%)
Mutual labels:  ioc, aop
Puresharp
Puresharp is a Framework that provides the essential APIs (AOP, IOC, etc...) to productively build high quality (.NET 4.5.2+ & .NET Core 2.1+) applications through reliability, scalability and performance without no compromise
Stars: ✭ 120 (+71.43%)
Mutual labels:  ioc, aop
tsioc
AOP, Ioc container, Boot framework, unit testing framework , activities workflow framework.
Stars: ✭ 15 (-78.57%)
Mutual labels:  ioc, aop
Doodle
A Simple Java MVC Framework。提供Bean容器、Ioc、Aop、MVC功能
Stars: ✭ 90 (+28.57%)
Mutual labels:  ioc, aop
Blog.core
💖 ASP.NET Core 6.0 全家桶教程,前后端分离后端接口,vue教程姊妹篇,官方文档:
Stars: ✭ 3,542 (+4960%)
Mutual labels:  ioc, aop
Jodd
Jodd! Lightweight. Java. Zero dependencies. Use what you like.
Stars: ✭ 3,616 (+5065.71%)
Mutual labels:  ioc, aop
Koatty
Koa2 + Typescript = Koatty. Use Typescript's decorator implement IOC and AOP.
Stars: ✭ 67 (-4.29%)
Mutual labels:  ioc, aop

##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);
  }
}

##其他

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].