• 自定义注解及应用


    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Login {
    }
    1.注解的定义:Java文件叫做Annotation,用@interface表示。
    2.元注解:@interface上面按需要注解上一些东西,包括@Retention、@Target、@Document、@Inherited四种。
    3.注解的保留策略:
      @Retention(RetentionPolicy.SOURCE)   // 注解仅存在于源码中,在class字节码文件中不包含
      @Retention(RetentionPolicy.CLASS)     // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
      @Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
    4.注解的作用目标:
      @Target(ElementType.TYPE)                     // 接口、类、枚举、注解
      @Target(ElementType.FIELD)                     // 字段、枚举的常量
      @Target(ElementType.METHOD)                 // 方法
      @Target(ElementType.PARAMETER)            // 方法参数
      @Target(ElementType.CONSTRUCTOR)       // 构造函数
      @Target(ElementType.LOCAL_VARIABLE)   // 局部变量
      @Target(ElementType.ANNOTATION_TYPE) // 注解
      @Target(ElementType.PACKAGE)               //
    5.注解包含在javadoc中:
      @Documented
    6.注解可以被继承:
      @Inherited
    7.注解解析器:用来解析自定义注解。
     
    应用:
    拦截器应用
    public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
        @Autowired
        private TokenService tokenService;
        public static final String USER_KEY = "userId";
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            Login annotation;
            if(handler instanceof HandlerMethod) {
                annotation = ((HandlerMethod) handler).getMethodAnnotation(Login.class);
            }else{
                return true;
            }
            if(annotation == null){
                return true;
            }
    参数解析器应用:
    
    public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
        @Override
        public boolean supportsParameter(MethodParameter parameter) {
            return parameter.getParameterType().isAssignableFrom(UserEntity.class) && parameter.hasParameterAnnotation(LoginUser.class);
        }
        @Override
        public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
                                      NativeWebRequest request, WebDataBinderFactory factory) throws Exception {
            //获取用户ID
            Object object = request.getAttribute(AuthorizationInterceptor.USER_KEY, RequestAttributes.SCOPE_REQUEST);
            if(object == null){
                return null;
            }
            //获取用户信息
            UserEntity user = userService.selectById((Long)object);
            return user;
        }
  • 相关阅读:
    检索通讯录,根据输入的电话号码的每一位下拉显示检索结果
    获取手机的具体型号 及 iOS版本号
    在iOS中使用ZBar扫描二维码
    iOS沙盒路径的查看和使用
    ios打开通讯录及点击通讯录时提取相关信息
    获取倒计时距离某一时间点的时间,判断身份证,电话号码格式是否正确的简单封装
    iOS 获取手机的型号,系统版本,软件名称,软件版本
    第三天战略会议
    第二天站略会议总结
    第一天站略会议总结
  • 原文地址:https://www.cnblogs.com/bchange/p/9448004.html
Copyright © 2020-2023  润新知