关于spring中使用反射的后反射类中无法使用spring中的bean

为了降低代码的耦合度,对于用户的操作做出了分类,遵循依赖倒置原则采用Command接口编程。以后想获取不同Command可以通过反射去获取即可。然后执行commad.run()方法。
关于spring中使用反射的后反射类中无法使用spring中的bean
于是问题出现了在command的一个实现类中出现了一个问,无法使用userDao,后来通过不断的调试发现UCommand的依赖关系没有注入到spring中。加上我是在想使用的时候再会反射去调用,这时候spring依赖关系的注入早就结束了,这时候再去调用UCommand时会将该方法注入到spring中,因为此时spring依赖注入的哇成了(spring的依赖注入的完成是在项目初始化前完成),再使用UCommand已经没有办法去完成注入依赖关系了。
关于spring中使用反射的后反射类中无法使用spring中的bean
于是想到使用BeanPostProcessor(每个bean注入完成以后的一个回调方法),在spring的bean初始化后,将Command这个接口的子类全部注入到spring中,这样在其他的类注入完成后,整个bean注入过程还没结束之前我们调用反射,spring就会将我们的command子类也完成依赖的注入过程。

也有就是保证:先反射 —> 后完成spring依赖注入
关于spring中使用反射的后反射类中无法使用spring中的bean
顺便也完成了自定义注解中的type值与其执行类的初始化。
关于spring中使用反射的后反射类中无法使用spring中的bean
之后再次调试userDao可以正常使用。


说明:为什么在BeanPostProcessor执行后spring可以帮我们完成依赖注入?

initBean中调用后置处理器结束以后
关于spring中使用反射的后反射类中无法使用spring中的bean
return到了下图,由下图可知bean初始化完成以后才是依赖注入,而后置处理器是在initBean中完成的。故在后置处理器中反射bean,可以成功将我们自定义的类的依赖注入交给spring去完成。
关于spring中使用反射的后反射类中无法使用spring中的bean