Springboot中自定义注解并且实现其功能


在Springboot中可以通过实现HandlerMethodArgumentResolver接口来为注解增加功能

使用步骤:

第一步:实现一个注解

//新增的自定义注解怎么使用,在正常情况下可以使用反射,
// 在springboot中可以使用HandlerMethodArgumentResolver接口来实现某些功能
@Target({ElementType.PARAMETER,ElementType.FIELD,ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginUserName {
}

第二步:实现HandlerMethodArgumentResolver接口,第一个方法,如果是true表示可以进入第二个方法。第二个方法返回值就是注解标注的值的赋值。

public class LoginUserNameResolver implements HandlerMethodArgumentResolver {

//  @Resource
//  private SessionRepository sessionRepository;

  @Override
  public boolean supportsParameter(MethodParameter methodParameter) {
    return methodParameter.getParameterAnnotation(LoginUserName.class) != null;
  }

  @Override
  public Object resolveArgument(MethodParameter methodParameter,
      ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest,
      WebDataBinderFactory webDataBinderFactory) throws Exception {

//    String sessionId = nativeWebRequest.getSessionId();
//
//    Session session = sessionRepository.findById(sessionId);
//
//    LoginUser loginUser = session.getAttribute(WorkOrderConstant.USER_ATTR);

      LoginUser loginUser = new LoginUser("liukun");

    if (null != loginUser) {
      return loginUser.getUsername();
    }

    return null;
  }
}

第三步:添加配置类,这边第一个方法注册为springboot的bean,第二个方法,将这个方法加入。就好了。

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

  @Bean
  public LoginUserNameResolver loginUserNameResolver() {
    return new LoginUserNameResolver();
  }

  @Override
  public void addArgumentResolvers(List resolvers) {
    resolvers.add(loginUserNameResolver());
  }
}