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<HandlerMethodArgumentResolver> resolvers) {
    resolvers.add(loginUserNameResolver());
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM