zoukankan      html  css  js  c++  java
  • 自定义注解

    自定义注解:

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface TestAnnotation {
        String value() default "";
        String name() default "";
    }

    使用自定义注解:

    @Service
    public class TestAnnotationService {
    
        @TestAnnotation(value = "myTestAnnotation")
        public String test(String s) {
            return s;
        }
    }

    要实现的功能是:在类加载后打印自定义注解的值

    @Component
    public class MyBeanPostProcessor implements BeanPostProcessor {
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            if(beanName.equals("testAnnotationService")){
                Class clazz = bean.getClass();
                Method[] methods=clazz.getDeclaredMethods();
                if(methods.length>0){
                    for(Method method:methods){
                        TestAnnotation annotation=method.getAnnotation(TestAnnotation.class);
                        if(annotation!=null){
                            System.out.println("222222"+annotation.value());
                        }
                    }
                }
            }
            return bean;
        }
    }

     这样在方法加载的时候就会打印222222myTestAnnotation

    注:

    BeanPostProcessor也称为Bean后置处理器,它是Spring中定义的接口,在Spring容器的创建过程中(具体为Bean初始化前后)会回调BeanPostProcessor中定义的两个方法。BeanPostProcessor的源码如下:

    public interface BeanPostProcessor {
    
        @Nullable
        default Object postProcessBeforeInitialization(Object bean, String beanName)     throws BeansException {
            return bean;
        }
    
        @Nullable
        default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            return bean;
        }
    }

    在方法调用前后,或者调用方法时获取注解并写相应的业务逻辑,可以使用切面的方式。

    @Aspect
    @Component
    public class TestAspect {
        @Before("@annotation(com.tkp.coupon.web.myself.annotation.TestAnnotation)")
        public void before(JoinPoint joinPoint) {
            System.out.println("before the method");
        }
    }
  • 相关阅读:
    70.BOM
    69.捕获错误try catch
    68.键盘事件
    523. Continuous Subarray Sum
    901. Online Stock Span
    547. Friend Circles
    162. Find Peak Element
    1008. Construct Binary Search Tree from Preorder Traversal
    889. Construct Binary Tree from Preorder and Postorder Traversal
    106. Construct Binary Tree from Inorder and Postorder Traversal
  • 原文地址:https://www.cnblogs.com/BonnieWss/p/11533960.html
Copyright © 2011-2022 走看看