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");
        }
    }
  • 相关阅读:
    微信小程序如何调用API实现数据请求-wx.request()
    微信小程序如何调用API实现数据请求-wx.request()
    详解Android数据存储技术
    详解Android数据存储技术
    详解Android数据存储技术
    带你走进CSS定位详解
    带你走进CSS定位详解
    bootstrap教程,SQL
    带你走进CSS定位详解
    jQuery基础与JavaScript与CSS交互-第五章
  • 原文地址:https://www.cnblogs.com/BonnieWss/p/11533960.html
Copyright © 2011-2022 走看看