java自定义注解的使用
关于自定义注解的声明网上有很多文章在讲解,本文侧重于对自定义注解的使用。
第一种用法:启动时获取自定义注解标记的类
1.创建一个自定义注解
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Component public @interface MyConf { String value() default ""; String appName() default ""; }
2.写一个类实现ApplicationContextAware在springBoot项目启动的时候加载自定义注解标记的类
@Component @Configuration public class InitTest implements ApplicationContextAware { @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { System.out.println("开始获取自定义注解标记的类"); Map<String, Object> beansWithAnnotation = applicationContext.getBeansWithAnnotation(MyConf.class); for (Map.Entry<String,Object> entry : beansWithAnnotation.entrySet()){ System.out.println(entry.getKey() + "::" + entry.getValue().getClass()); System.out.println(); } } }
这样就可以获取到自定义注解标记的类啦。
第二种用法:AOP捕获
1.创建一个自定义注解
@Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Component public @interface MyAop { String apiPath() default ""; }
2.创建AOP
@Aspect @Component @Slf4j public class TestAop { private static final Logger logger = LoggerFactory.getLogger(TestAop.class); @Autowired private HttpServletRequest servletRequest; //切点表达式 指向我们的自定义注解所在的路径 @Pointcut("@annotation(cn.lzh.my.config.annotation.MyAop)") public void myaopPoint() { } @Before("myaopPoint()") public void myBefore(JoinPoint point){ logger.info("请求接口:{}",this.servletRequest.getRequestURI()); logger.info("请求参数:{}",JSONObject.toJSONString(point.getArgs()) ); logger.info("请求IP:{}",this.getIpAddress(servletRequest)); }
3.在方法上加上我们的自定义注解就可以使用啦
@MyAop(apiPath = "testMyAop") @RequestMapping(value = "/testMyAop",method = RequestMethod.GET) public ResultBean typeList(){ return ResultBean.success(1); }
不过第二种使用方式不通过自定义注解也是可以实现的。
上一篇:
JS实现多线程数据分片下载
下一篇:
CNN样例—手写字母识别LeNet-5