Magician-Containers 1.0.0 发布,Magician 家族又添一位新成员

helloworld_03424577
• 阅读 222

最近在使用 Magician 开发项目的过程中,发现了一些问题,有时候想对某些方法做监听,或者 想启动一个定时任务做轮询,会比较麻烦一点,因为 Magician 暂时没有对应的解决方案,但是 我又不想在现有的 Magician 里添加功能,因为这样会让项目变得越来越大,最后逐渐变成一个大胖子,失去灵活性,开发者在使用的时候,不管需不需要的功能 都会被一股脑的引入到项目中,这是我无法接受的。 而且也违背了 Magician 一开始的初衷,所以最后我们决定以一个新组建的形式来发布。 把用不用的权利 交给用户。

Magician-Containers 带来了什么

  1. Bean 管理(没有 IOC,只是为了在 bean 上面绑定功能,解决一些麻烦)
  2. AOP
  3. 定时任务

Bean 管理

在类上面加一个注解即可,不可以用在 controller 上,也不是所有的类都需要变成一个 bean,开发者可以随意决定。

我们推荐,在你需要在这个类里面使用 AOP 或者定时任务的时候,才把它变成一个 bean。

@MagicianBean
public class DemoBean {

}

AOP

编写 AOP 的逻辑

public class DemoAop implements BaseAop {

    /**
     * 方法执行前
     * @param args 方法的参数
     */
    public void startMethod(Object[] args) {

    }

    /**
     * 方法执行后
     * @param args 方法的参数
     * @param result 方法的返回数据
     */
    public void endMethod(Object[] args, Object result) {

    }

    /**
     * 方法出异常后
     * @param e 方法的异常信息
     */
    public void exp(Throwable e) {

    }
}

挂到需要监听的方法上

@MagicianBean
public class DemoBean {

    @MagicianAop(className = DemoAop.class)
    public void demoAopMethod() {

    }
}

定时任务

目前只支持 按照间隔轮询,还不支持 cron 表达式

@MagicianBean
public class DemoBean {

    // loop: 轮询频率,单位:毫秒
    @MagicianTimer(loop=1000)
    public void demoTimerMethod() {

    }
}

获取 bean 对象

不可以在定义成员变量的时候直接赋值,下面示例是我们推荐的一种写法,具体可以看官网的文档

@MagicianBean
public class DemoBean {

    private DemoBean demoBean;

    public void demoMethod() {
        demoBean = BeanUtil.get(DemoBean.class);
    }
}

启动时加载资源

HttpServer httpServer = Magician
        .createHttp()
        .scan("com.test"); // Scanning range (package name)

// 在scan方法执行后,才可以加载bean,顺序一定要注意
MagicianContainers.load();

httpServer.bind(8080);

以上只是这一个组件的介绍,Magician是一套基于netty开发的web解决方案,包含多个组件,目前已经发布的有:Magician(基于netty开发的http服务包),Magician-Web(MVC框架),Magician-JDBC(JDBC框架),Magician-Containers(本文介绍的这个组件)

感兴趣的人可以访问官网了解更多:https://magician-io.com

点赞
收藏
评论区
推荐文章
Irene181 Irene181
2年前
用Python打造批量下载视频并能可视化下载进度的炫酷下载器
大家好,我是Python进阶者,今天给大家整点好玩的,一起来看看吧【一、项目背景】平时宅在家的我们最爱做的事莫过于追剧了,但是有时候了,网络原因,可能会让你无网可上,这个时候那些好看的电视剧和电影自然是无法观看了,本期我们要讲的就是怎样下载这些视频。【二、项目目标】通过Python程序对所感兴趣的视频进行批量下载,正好小编近期看到一些不错的视频,因为想
Irene181 Irene181
2年前
用Python打造批量下载视频并能可视化下载进度的炫酷下载器
大家好,我是Python进阶者,今天给大家整点好玩的,一起来看看吧【一、项目背景】平时宅在家的我们最爱做的事莫过于追剧了,但是有时候了,网络原因,可能会让你无网可上,这个时候那些好看的电视剧和电影自然是无法观看了,本期我们要讲的就是怎样下载这些视频。【二、项目目标】通过Python程序对所感兴趣的视频进行批量下载,正好小编近期看到一些不错的视频,因为想
Stella981 Stella981
2年前
SpringBoot项目打成jar包后上传文件到服务器 目录与jar包同级问题
看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了。当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源。但是当你使用SpringBoot的jar包发布项目的时候,你会发现,你不能像以前一样操作文件了。当你使用FilefilenewFile()的时候根本不知道这个
Easter79 Easter79
2年前
SpringBoot项目打成jar包后上传文件到服务器 目录与jar包同级问题
看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了。当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源。但是当你使用SpringBoot的jar包发布项目的时候,你会发现,你不能像以前一样操作文件了。当你使用FilefilenewFile()的时候根本不知道这个
Stella981 Stella981
2年前
PHP发起POST请求(支持模拟表单和json传值)
HTTP请求是开发的过程中经常会遇到的任务,GET请求比较简单,但是POST请求却会遇到一些问题。有时候对方需要你模拟表单请求,有时候又希望你传递一个json。我们可以封装一个通用的方法来完成。functionpost($url,$data,$isJsontrue,$headers,$timeout10
Wesley13 Wesley13
2年前
Java后端学习路线
自学/学习路线这样的一期我想写很久了,因为一直想写的全一点硬核一点所以拖到了现在,我相信这一期对不管是还在学校还是已经工作的同学都有所帮助,不管是前端还是后端我都墙裂建议大家看完,因为这样会让你对你所工作的互联网领域相关技术栈有个初步的了解。你们也知道敖丙我是个创作鬼才,常规的切入点也不是我的风格,我毕业后主要接触的都是电商领域,所以这一期我把目前所了解
Stella981 Stella981
2年前
JFinal Quartz 支持配置文件和持久化
    随着需求的增加,现在要定时启动一个调度和计划任务,原先写的QuartzPlugin,是持久化保存到数据库中的,从数据库中读取任务并执行。要是添加一个每天循环任务,就要在代码里写一次开始任务的代码,执行后,再注释掉,最后重启项目。否则会因为启动同name,同group的任务而报错org.quartz.ObjectAlreadyExistsE
Stella981 Stella981
2年前
Javascript模块化编程(二):AMD规范
七、模块的规范先想一想,为什么模块很重要?因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写法,岂不是乱了套!考虑到Javascript模块现在还没有官方规范,这一点就更重要了。目前,通行的Javascript模块规范共
Wesley13 Wesley13
2年前
Java中如何使用嵌入MySQL
这篇文件主要介绍在Java中嵌入式MySQL的使用,对于一些的应用项目,提供安装版的Mysql,Oracle是必须的工作。但是有时候如果是一个小的工具,可安装或者移植性比较强的小软件。再去安装数据库可能就比较麻烦了。其实MySQL也有嵌入式的,不需要安装,在使用的过程中,会自动创建数据库以及通过代码的方式启动或者关闭。下面提供一些代码片段,具体的会提供下
Wesley13 Wesley13
2年前
6 个重构方法可帮你提升 80% 的代码质量
在过去做了不少代码走读,发现了一些代码质量上比较普遍的问题,以下是其中的前五名:1.臃肿的类: 类之所以会臃肿,是因为开发者缺乏对最基本的编码原则,即“单一职责原则”(SRP)的理解。这些类往往会变得很臃肿,是由于不同的且在功能上缺少关联的方法都放在了相同的类里面。2.长方法: 方
helloworld_03424577
helloworld_03424577
Lv1
从此带我徜徉你骨肉里钟情的汉水辽河,有何不可
文章
1
粉丝
1
获赞
1
热门文章

暂无数据