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