注解可以加在不同的地方,主要就是在反射的时候给一个类带上更多的信息
例子:
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface UseCase { public int id(); public String description() default "no description"; }
public class UseCaseTracker { public static void trackUseCases(List<Integer> useCases, Class<?> cl){ for(Method m : cl.getDeclaredMethods()){ UseCase uc = m.getAnnotation(UseCase.class); System.err.println(uc.description()); } } public static void main(String[] args){ trackUseCases(new ArrayList<>(), MyUtil.class); } }
类似这样在反射的时候可以多一个判断
因此就可以很容易想到springboot value的时候后台怎么操作的
https://github.com/zhougit86/JavaAOP
这个代码中就有一个为刚刚生成的对象赋值的功能
https://www.zhihu.com/question/47449512/answer/106034220
这个是AOP的说明,里面实现的那个invoke是关键