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
}