Interception de méthode (AOP)
L'AOP du framework YMP est basé sur l'interception implémentée par le MethodInterceptor de CGLIB. Il est configuré à travers les annotations suivantes :
@Before : utilisé pour définir le pré-intercepteur d'une classe ou d'une méthode, et déclarer le pré-intercepteur. -intercepteur sur la classe Sera appliqué à toutes les méthodes de la classe ;
@After : utilisé pour définir le post-intercepteur d'une classe ou d'une méthode. Le post-intercepteur déclaré sur la classe sera appliqué à toutes les méthodes de. la classe ;
@Clean : utilisé pour nettoyer tous les intercepteurs spécifiés sur la classe, les intercepteurs nettoyés ne seront pas exécutés
@ContextParam : utilisé pour définir les paramètres de contexte, principalement utilisé pour transmettre des paramètres à l'intercepteur ; Configuration ;
@Ignored : La déclaration d'une méthode ignorera toutes les configurations de l'intercepteur ;
Description :
La déclaration des méthodes annotées @Ignored, des méthodes non publiques, des méthodes de classe Object et des méthodes surchargées de classe Object ne sera pas gérée par l'intercepteur.
Exemple 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(); } } }
Exemple 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(); } } }
Remarque : @ContextParam
L'attribut value de l'annotation permet d'obtenir la valeur de xxx à partir des paramètres globaux du framework via le format de $xxx