java中自定义注解

java自定义注解及应用

先简单记录一下怎么自定义注解后续增加解释(此配置仅在SpringBoot上尝试,SSM自行配置基本略同)

  1. 创建自定义注解LoginRequired
/**
  * @author Tireless
  * @version 1.0
  * @description: 登录注解
  * @date 2022/6/18 17:46
  */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginRequired {

}

该注解主要是用于标记需要验证方法或者类

2.创建简单的controller类用于测试

/**
 * @author Tireless
 * @version 1.0
 * @description: TODO
 * @date 2022/6/18 17:43
 */
@RestController
public class LoginController {
    
    @GetMapping("/A")
    public String sourceA(){
        return "正在访问A";
    }

    @LoginRequired
    @GetMapping("/B")
    public String sourceB(){
        return "正在访问B";
    }
    
}

浏览器分别访问http://localhost:8080/A和http://localhost:8080/B
可以见到访问正常(这里不贴图片了)

3.创建拦截器

/**
 * @author Tireless
 * @version 1.0
 * @description: 拦截器
 * @date 2022/6/18 17:48
 */
public class SourceInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {


        // 反射获取方法上的LoginRequred注解
        HandlerMethod handlerMethod = (HandlerMethod)handler;
        LoginRequired loginRequired = handlerMethod.getMethod().getAnnotation(LoginRequired.class);
        if(loginRequired == null){
            return true;
        }

        // 有LoginRequired注解说明需要登录,提示用户登录
        response.setContentType("application/json; charset=utf-8");
        response.getWriter().print("你访问的资源需要登录");
        return false;

    }
}

4.配置拦截器


/**
 * @author Tireless
 * @version 1.0
 * @description: TODO
 * @date 2022/6/18 17:50
 */
@Configuration
public class InterceptorTrainConfigurer implements WebMvcConfigurer {
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
//        添加拦截器
        registry.addInterceptor(new SourceInterceptor()).addPathPatterns("/**");
    }
}
  1. 浏览器再次分别访问A和B

至此自定义注解完成,注解极大简化开发中代码美观性,这里也仅仅是简单的Demo,后续有时间继续补充

posted @ 2022-06-18 19:06  Tireless  阅读(219)  评论(0编辑  收藏  举报