学而不思则罔,思而不学则殆
大家都用过Spring的@Value("xxx")注解,如果没有debug过源码的同学对这个操作还是一知半解,工作一年了学了反射学了注解,还是不会自己手撸一个注解对属性赋值的操作。今天就用几分钟时间给你讲明白这个如何实现!
理想中代码:
@Compant public class Bean01 { @MyValue("张三") //自定义注解 String name; }
如果学过反射,获取类属性上面的自定义注解对象简直太简单,那怎么拿到“张三”,并给Bean01这个对象的name赋值呢?
在这里我用spring的形式给大家展示一下,完成这个理想赋值的demo~
1.spring启动,通过ComponentScan扫描注解(标签)加载@Component装饰的所有bean对象
2.通过Spring的BeanFactory增强,拿到Spring中注册的类信息
(BeanFactory会把扫描到的类信息放到BeanDefinitionMap中
BeanFactory会把扫描到的类名称放到BeanDefinitionNames中)
3.获取BeanDefinition中class信息,通过反射技术,获取类的属性,进而判断有没有自定义的注解装饰。
4.使用InvocationHandler,拿到自动义注解的属性值