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