자바 SpringBoot 사용자 정의 주석 및 사용자 정의 해석 기 구현 대상 자동 주입 작업

\#java-SpringBoot 사용자 정의 매개 변수 해석 기 구현 대상 자동 주입
해석 기 논리 프로 세 스 도표

배경 해석 기
우선,자바 배경 에 해상도 기 를 작 성 했 습 니 다.코드 는 다음 과 같 습 니 다.

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   
  }
추가 지식:Springboot 사용자 정의 주석 기반 자동 조립
1.자바 bean 정의

@Data //lombok  
public class User {
  private Integer userId;
  private String userName;
}
2.configuration 클래스 만 들 기

public class UserConfig {
  @Bean
  public User getUser(){
    User user = new User();
    user.setUserId(1);
    user.setUserName("        ");
    return user;
  }
}
3.주 해 를 정의 한다

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(UserConfig.class)
public @interface EnableAutoImport {
}
4.호출

@SpringBootApplication
@EnableAutoImport  //         
public class DemoApplication implements InitializingBean {
//     InitializingBean     bean       afterPropertiesSet
  @Autowired
  private User user;  //   user 

  public static void main(String[] args) {

    SpringApplication.run(DemoApplication.class, args);
  }

  @Override
  public void afterPropertiesSet() throws Exception {
   //            
    System.out.println(user.getUserName());
  }
}
이상 의 자바 SpringBoot 사용자 정의 주석 과 사용자 정의 해석 기 실현 대상 자동 주입 작업 은 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 시기 바 랍 니 다.여러분 들 도 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기