SQLServer Decimal数据类型怎么赋值
298
2023-03-25
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.supportIEjhEtrIw.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
super.addArgumentResolvers(argumentResolvers);
argumentResolvers.add(getLoginUserHandlerMethodArgumentResolver());
}
}
最后是我们的开关,也就是自定义的注解LoginUser注解,当在controller方法中参数有使用此注解,就会触发我们的解析器进行对象注入,那么我就得自己定义一个属于自己的注解
import java.lang.annotation.ElementType;
import java.lang.annotation.IEjhEtrIwRetention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 注入用户信息注解,
*比较简单,没有声明更多的属性
* @author lipengjun
* @email 939961241@qq.com
* @date 2017-03-23 20:39
*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginUseIEjhEtrIwr {
}
然后就是一小个演示使用的方法
@RequestMapping(value = "/prepay")
@ResponseBody
public Map
//此间,从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());
}
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~