java-springBoot 사용자 정의 주석 및 사용자 정의 해상도 구현 대상 자동 주입

14907 단어 새로운 총결산

# java-springBoot 사용자 정의 매개변수 파서로 객체 자동 주입

  • 해석기 논리 프로세스 도표
  • 백그라운드 해석 주석의 해석기
  • 해상도 논리 프로세스 도표


    프런트 엔드 controlelr Service 계층 해석기 백엔드 controller 사용자 정의 LoginUser 주석이 없으면 사용자 정의 LoginUser 주석 조회 대상 실체가 업무 논리 프런트 엔드 백엔드 controlelr Service 계층 해석기 백엔드 controller

    백그라운드 해석 메모 해석기


    우선, 나는 자바 백엔드에서 해상도를 짰는데, 코드는 다음과 같다.
    import com.ruoyi.framework.interceptor.annotation.LoginUser;
    import com.ruoyi.project.WebMoudle.WebUser.domain.WebUser;
    import com.ruoyi.project.WebMoudle.WebUser.service.IWebUserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.MethodParameter;
    import org.springframework.stereotype.Service;
    import org.springframework.web.bind.support.WebDataBinderFactory;
    import org.springframework.web.context.request.NativeWebRequest;
    import org.springframework.web.context.request.RequestAttributes;
    import org.springframework.web.method.support.HandlerMethodArgumentResolver;
    import org.springframework.web.method.support.ModelAndViewContainer;
    
    
    /**
     *  @LoginUser controller 
     *  , controller *
     * @author yangz
     */
    @Service
    public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
    
    	// service
        @Autowired
        private IWebUserService webUserService;
    
        @Override
        public boolean supportsParameter(MethodParameter parameter) {
            return parameter.getParameterType().isAssignableFrom(WebUser.class) && parameter.hasParameterAnnotation(LoginUser.class);
        }
    
        @Override
        public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
                                      NativeWebRequest request, WebDataBinderFactory factory) throws Exception {
            // request ID, springBoot 
            Object object = request.getAttribute(AuthorizationInterceptor.LOGIN_USER_KEY, RequestAttributes.SCOPE_REQUEST);
            if (object == null) {
                return null;
            }
    
            // 
            Long userId=(Long) object;
            WebUser user = webUserService.selectWebUserById(userId);
            return user;
        }
    }
    

    그 다음에, 나는 차단기 설정 클래스를 만들어서, 차단기를spring 용기에 주입한다
    import com.ruoyi.framework.interceptor.LoginUserHandlerMethodArgumentResolver;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.method.support.HandlerMethodArgumentResolver;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    import java.util.List;
    
    @Configuration
    public class LoginUserConfig extends WebMvcConfigurerAdapter {
    
    
           /**
         *  , 
         * @return
         */
        @Bean
        public LoginUserHandlerMethodArgumentResolver getLoginUserHandlerMethodArgumentResolver(){
            return new LoginUserHandlerMethodArgumentResolver();
        }
    
        @Override
        public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers){
            super.addArgumentResolvers(argumentResolvers);
            argumentResolvers.add(getLoginUserHandlerMethodArgumentResolver());
        }
    }
    

    마지막으로 우리의 스위치, 즉 사용자 정의 주석LoginUser 주석입니다. controller 방법에서 파라미터가 이 주석을 사용하면 우리의 해상도가 대상 주입을 촉발합니다. 그러면 저는 자신만의 주석을 정의해야 합니다.
     import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /**
     *  ,
     * , 
     * @author lipengjun
     * @email [email protected]
     * @date 2017-03-23 20:39
     */
    @Target(ElementType.PARAMETER)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface LoginUser {
    
    }
    

    그리고 아주 작은 시범으로 사용하는 방법입니다.
        @RequestMapping(value = "/prepay")
        @ResponseBody
        public Map<String,Object> prepay(@LoginUser WebUser webUser){
        	// , request userId controller webuser webUser 
        }
    

    좋은 웹페이지 즐겨찾기