java自定义注解(以及实现)

1.创建自定义注解

@Documented
@Target({ ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface UserInfo {
	String columnName() default "";

}
参数解析:
	(1)Target:当前注解使用的位置。
	  (2) Retention:注解使用范围
	  (3)Documented:使用使用在java doc文档

2.实现注解(通过实现HandlerMethodArgumentResolver 自定义解析工具)具体实现resolveArgument 改方法

@Override
	public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
			NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
		Subject subject = SecurityUtils.getSubject();
		if (!subject.isAuthenticated())
			return null;
		UserInfo cuser = parameter.getParameter().getAnnotation(UserInfo.class);
		if (cuser == null)
			return null;
		Class<?> klass = parameter.getParameterType();
		User lu = (User) subject.getPrincipal();
		if (lu == null) {
			return null;
		}
		//获取当前注解参数的类型!
		if (klass.isAssignableFrom(User.class)) {
			return lu;
		}
		if(klass.isAssignableFrom(String.class)){
			String name = StringUtils.isNotBlank(cuser.columnName()) ? cuser.columnName() : parameter.getParameterName();
			userColumns.get(name).setAccessible(true);
			String result = (String) userColumns.get(name).get(lu);
			if(result!=null)
				return result;
			return null;
		}
		return null;
	}

为注解参数进行字段匹配:

public MyHandlerMethodArgumentResolver() {
//指定当前注解 注入的类型  user 或则user对象的属性
	Stream.of(User.class.getDeclaredFields()).forEach(f -> {
		userColumns.put(f.getName(), f);
	});
}
private Map<String, Field> userColumns = new HashMap<>();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值