V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Joker123456789
V2EX  ›  Java

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

  •  
  •   Joker123456789 · 2022-07-13 13:29:54 +08:00 · 1066 次点击
    这是一个创建于 894 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在使用 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);
    

    访问官网了解更多:https://magician-io.com

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5693 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:10 · PVG 11:10 · LAX 19:10 · JFK 22:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.