赞
踩
关于自定义注解的声明网上有很多文章在讲解,本文侧重于对自定义注解的使用。
第一种用法:启动时获取自定义注解标记的类
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);
- }
不过第二种使用方式不通过自定义注解也是可以实现的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。