100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java 自定义注解 解析器_java SpringBoot如何实现自定义注解及自定义解析器对象自

java 自定义注解 解析器_java SpringBoot如何实现自定义注解及自定义解析器对象自

时间:2020-11-18 23:29:10

相关推荐

java 自定义注解 解析器_java SpringBoot如何实现自定义注解及自定义解析器对象自

java SpringBoot如何实现自定义注解及自定义解析器对象自动注入的方法

发布时间:-08-20 09:34:34

来源:亿速云

阅读:450

作者:小新

这篇文章主要介绍java SpringBoot如何实现自定义注解及自定义解析器对象自动注入的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

# java-SpringBoot自定义参数解析器实现对象自动注入

解析器逻辑流程图表

后台解析注解的解析器

首先,我在java后台编写了一个解析器,代码如下

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 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 939961241@

* @date -03-23 20:39

*/

@Target(ElementType.PARAMETER)

@Retention(RetentionPolicy.RUNTIME)

public @interface LoginUser {

}

然后就是一小个演示使用的方法

@RequestMapping(value = "/prepay")

@ResponseBody

public Map prepay(@LoginUser WebUser webUser){

//此间,从request中获取到userId信息就会在进入controller之前将webuser对象查出并注入到webUser参数中

}

补充知识:Springboot基于自定义注解的自动装配

1.定义java 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());

}

}

以上是java SpringBoot如何实现自定义注解及自定义解析器对象自动注入的方法的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

java 自定义注解 解析器_java SpringBoot如何实现自定义注解及自定义解析器对象自动注入的方法...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。