java中自定义注解
java自定义注解及应用
先简单记录一下怎么自定义注解后续增加解释(此配置仅在SpringBoot上尝试,SSM自行配置基本略同)
- 创建自定义注解LoginRequired
/**
* @author Tireless
* @version 1.0
* @description: 登录注解
* @date 2022/6/18 17:46
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginRequired {
}
该注解主要是用于标记需要验证方法或者类
2.创建简单的controller类用于测试
/**
* @author Tireless
* @version 1.0
* @description: TODO
* @date 2022/6/18 17:43
*/
@RestController
public class LoginController {
@GetMapping("/A")
public String sourceA(){
return "正在访问A";
}
@LoginRequired
@GetMapping("/B")
public String sourceB(){
return "正在访问B";
}
}
浏览器分别访问http://localhost:8080/A和http://localhost:8080/B
可以见到访问正常(这里不贴图片了)
3.创建拦截器
/**
* @author Tireless
* @version 1.0
* @description: 拦截器
* @date 2022/6/18 17:48
*/
public class SourceInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 反射获取方法上的LoginRequred注解
HandlerMethod handlerMethod = (HandlerMethod)handler;
LoginRequired loginRequired = handlerMethod.getMethod().getAnnotation(LoginRequired.class);
if(loginRequired == null){
return true;
}
// 有LoginRequired注解说明需要登录,提示用户登录
response.setContentType("application/json; charset=utf-8");
response.getWriter().print("你访问的资源需要登录");
return false;
}
}
4.配置拦截器
/**
* @author Tireless
* @version 1.0
* @description: TODO
* @date 2022/6/18 17:50
*/
@Configuration
public class InterceptorTrainConfigurer implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 添加拦截器
registry.addInterceptor(new SourceInterceptor()).addPathPatterns("/**");
}
}
- 浏览器再次分别访问A和B
至此自定义注解完成,注解极大简化开发中代码美观性,这里也仅仅是简单的Demo,后续有时间继续补充