当前位置:   article > 正文

java自定义注解的使用_java自定义注解什么时候执行

java自定义注解什么时候执行

关于自定义注解的声明网上有很多文章在讲解,本文侧重于对自定义注解的使用。

第一种用法:启动时获取自定义注解标记的类

1.创建一个自定义注解

  1. @Target({ElementType.TYPE})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Component
  4. public @interface MyConf {
  5. String value() default "";
  6. String appName() default "";
  7. }

2.写一个类实现ApplicationContextAware在springBoot项目启动的时候加载自定义注解标记的类

  1. @Component
  2. @Configuration
  3. public class InitTest implements ApplicationContextAware {
  4. @Override
  5. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  6. System.out.println("开始获取自定义注解标记的类");
  7. Map<String, Object> beansWithAnnotation = applicationContext.getBeansWithAnnotation(MyConf.class);
  8. for (Map.Entry<String,Object> entry : beansWithAnnotation.entrySet()){
  9. System.out.println(entry.getKey() + "::" + entry.getValue().getClass());
  10. System.out.println();
  11. }
  12. }
  13. }

这样就可以获取到自定义注解标记的类啦。

第二种用法:AOP捕获

1.创建一个自定义注解

  1. @Target({ElementType.METHOD})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Component
  4. public @interface MyAop {
  5. String apiPath() default "";
  6. }

2.创建AOP

  1. @Aspect
  2. @Component
  3. @Slf4j
  4. public class TestAop {
  5. private static final Logger logger = LoggerFactory.getLogger(TestAop.class);
  6. @Autowired
  7. private HttpServletRequest servletRequest;
  8. //切点表达式 指向我们的自定义注解所在的路径
  9. @Pointcut("@annotation(cn.lzh.my.config.annotation.MyAop)")
  10. public void myaopPoint() {
  11. }
  12. @Before("myaopPoint()")
  13. public void myBefore(JoinPoint point){
  14. logger.info("请求接口:{}",this.servletRequest.getRequestURI());
  15. logger.info("请求参数:{}",JSONObject.toJSONString(point.getArgs()) );
  16. logger.info("请求IP:{}",this.getIpAddress(servletRequest));
  17. }

 3.在方法上加上我们的自定义注解就可以使用啦

  1. @MyAop(apiPath = "testMyAop")
  2. @RequestMapping(value = "/testMyAop",method = RequestMethod.GET)
  3. public ResultBean typeList(){
  4. return ResultBean.success(1);
  5. }

 


不过第二种使用方式不通过自定义注解也是可以实现的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/240298
推荐阅读
相关标签
  

闽ICP备14008679号