在springboot中使用注解將值注入?yún)?shù)的操作
后端的許多管理系統(tǒng)需要登陸者的信息,如shiro登陸后,會(huì)將登陸者的信息存儲(chǔ)在shiro的session,在使用時(shí)需要多行代碼獲取用戶(hù)信息??梢园勋@取在shiro中的登陸者信息封裝在一個(gè)類(lèi)中,使用時(shí)獲取。本文主要講述如何使用注解將值注入?yún)?shù),shiro的配置請(qǐng)自行百度。
定義注解
新建一個(gè)InfoAnnotation.java的注解類(lèi),用于注解參數(shù),代碼如下:
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface InfoAnnotation {
String value() default "userId";//默認(rèn)獲取userId的值
}
定義注解處理類(lèi)
新建一個(gè)InfoResolver類(lèi),AOP無(wú)法將值注入?yún)?shù),需要繼承HandlerMethodArgumentResolver類(lèi),代碼如下:
public class InfoResolver implements HandlerMethodArgumentResolver {
//使用自定義的注解
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
return methodParameter.hasParameterAnnotation(InfoAnnotation.class);
}
//將值注入?yún)?shù)
@Override
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
//獲取捕獲到的注解
InfoAnnotation annotation = methodParameter.getParameterAnnotation(InfoAnnotation.class);
String value = annotation.value();
//獲取需要注入值得邏輯
//該例子在shiro中獲取userId或者用戶(hù)信息
if (value == null || "".equalsIgnoreCase(value) || value.equalsIgnoreCase("userId")){
User user = (User)SecurityUtils.getSubject().getSession().getAttribute("user");
if (user == null){
return 1;
}
return user.getId();
} else if ("user".equalsIgnoreCase(value)){
return SecurityUtils.getSubject().getSession().getAttribute("user");
}
return value;
}
}
使springboot支持該攔截器
修改啟動(dòng)類(lèi),繼承WebMvcConfigurationSupport類(lèi),添加自定義得攔截器,代碼如下:
@SpringBootApplication
public class DemoApplication extends WebMvcConfigurationSupport {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
//添加自定義的攔截器
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers){
super.addArgumentResolvers(argumentResolvers);
argumentResolvers.add(new InfoResolver());
}
}
測(cè)試
測(cè)試用例,如下代碼
@GetMapping
public BaseResponse<?> test(@InfoAnnotation int userId){
return ResponseUtil.successResponse(userId);
}
登陸返回的信息

調(diào)用測(cè)試用例返回的信息

可以看到登陸返回的用戶(hù)信息的id和測(cè)試用例返回的data一致。
以上這篇在springboot中使用注解將值注入?yún)?shù)的操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java IO流學(xué)習(xí)總結(jié)之文件傳輸基礎(chǔ)
這篇文章主要介紹了Java IO流學(xué)習(xí)總結(jié)之文件傳輸基礎(chǔ),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java io流的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04
多數(shù)據(jù)源如何實(shí)現(xiàn)事務(wù)管理
Spring中涉及三個(gè)核心事務(wù)處理接口:PlatformTransactionManager、TransactionDefinition和TransactionStatus,PlatformTransactionManager提供事務(wù)操作的基本方法,如獲取事務(wù)、提交和回滾2024-09-09
Java模擬死鎖發(fā)生之演繹哲學(xué)家進(jìn)餐問(wèn)題案例詳解
這篇文章主要介紹了Java模擬死鎖發(fā)生之演繹哲學(xué)家進(jìn)餐問(wèn)題,結(jié)合具體演繹哲學(xué)家進(jìn)餐問(wèn)題的案例形式詳細(xì)分析了死鎖機(jī)制與原理,需要的朋友可以參考下2019-10-10
Mybatis批量插入返回成功的數(shù)目實(shí)例
這篇文章主要介紹了Mybatis批量插入返回成功的數(shù)目實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
Java中關(guān)于二叉樹(shù)的概念以及搜索二叉樹(shù)詳解
二叉樹(shù)是一種很有用的非線(xiàn)性結(jié)構(gòu),日常的開(kāi)發(fā)中常會(huì)用到,關(guān)于二叉樹(shù)的概念以及搜索二叉樹(shù)本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
Java httpClient連接池支持多線(xiàn)程高并發(fā)的實(shí)現(xiàn)
本文主要介紹了Java httpClient連接池支持多線(xiàn)程高并發(fā)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Spring Boot之AOP配自定義注解的最佳實(shí)踐過(guò)程
這篇文章主要給大家介紹了關(guān)于Spring Boot之AOP配自定義注解的最佳實(shí)踐過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
Spring Security 安全框架應(yīng)用原理解析
這篇文章主要介紹了Spring Security 安全框架應(yīng)用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07

