Kaedah pemintasan (AOP)


AOP rangka kerja YMP adalah berdasarkan pemintasan yang dilaksanakan oleh MethodInterceptor CGLIB Ia dikonfigurasikan melalui anotasi berikut:

  • @Sebelum: digunakan untuk menetapkan prapemintas kelas atau kaedah, dan mengisytiharkan pra. -pemintas pada kelas Akan digunakan untuk semua kaedah kelas;

  • @Selepas: digunakan untuk menetapkan pemintas pasca kelas atau kaedah yang diisytiharkan pada kelas akan digunakan untuk semua kaedah kelas;

  • @Clean: digunakan untuk membersihkan semua atau pemintas yang ditentukan pada kelas, pemintas yang dibersihkan tidak akan dilaksanakan; Konfigurasi;

  • @Diabaikan: Mengisytiharkan kaedah akan mengabaikan semua konfigurasi pemintas; pemintas itu.

  • Contoh 1:

  •     // 创建自定义拦截器
        public class DemoInterceptor implements IInterceptor {
            public Object intercept(InterceptContext context) throws Exception {
                // 判断当前拦截器执行方向
                switch (context.getDirection()) {
                    // 前置
                    case BEFORE:
                        System.out.println("before intercept...");
                        // 获取拦截器参数
                        String _param = context.getContextParams().get("param");
                        if (StringUtils.isNotBlank(_param)) {
                            System.out.println(_param);
                        }
                        break;
                    // 后置
                    case AFTER:
                        System.out.println("after intercept...");
                }
                return null;
            }
        }
    
        @Bean
        public class TestDemo {
    
            @Before(DemoInterceptor.class)
            public String beforeTest() {
                return "前置拦截测试";
            }
    
            @After(DemoInterceptor.class)
            public String afterTest() {
                return "后置拦截测试";
            }
    
            @Before(DemoInterceptor.class)
            @After(DemoInterceptor.class)
            @ContextParam({
                    @ParamItem(key = "param", value = "helloworld")
                })
            public String allTest() {
                return "拦截器参数传递";
            }
    
            public static void main(String[] args) throws Exception {
                YMP.get().init();
                try {
                    TestDemo _demo = YMP.get().getBean(TestDemo.class);
                    _demo.beforeTest();
                    _demo.afterTest();
                    _demo.allTest();
                } finally {
                    YMP.get().destroy();
                }
            }
        }

Contoh 2:

    @Bean
    @Before(DemoInterceptor.class)
    @ContextParam({
            @ParamItem(key = "param", value = "helloworld")
        })
    public class TestDemo {

        public String beforeTest() {
            return "默认前置拦截测试";
        }

        @After(DemoInterceptor.class)
        public String afterTest() {
            return "后置拦截测试";
        }

        @Clean
        public String cleanTest() {
            return "清理拦截器测试";
        }

        public static void main(String[] args) throws Exception {
            YMP.get().init();
            try {
                TestDemo _demo = YMP.get().getBean(TestDemo.class);
                _demo.beforeTest();
                _demo.afterTest();
                _demo.cleanTest();
            } finally {
                YMP.get().destroy();
            }
        }
    }

Nota
format nilai xxx:
nilai global bagi parameter tersebut daripada $xxx