问题
前两天在工作中,使用了构造方法注入实例,但启动的时候报错提示用的是默认的无参构造创建的实例,有点懵逼
经过排查发现,公司框架的自定义注解(包装了@Component)并没有完全交给spring管理,而是启动的时候自己去加载被这个注解标记的类。通过ApplicationContext的getBeansWithAnnotation方法创建并获取被改注解标记的所有bean。
用这种方式去获取并创建的话,用的是默认无参构造创建对象,所以构造方法注入方式报错
查找报错位置
发现使用ApplicationContext的getBeansWithAnnotation方法创建并获取对象的话, 最终调用的事无参构造方法来创建对象。
解决
由于是公司框架的自定义注解, 所以只能通过修改注入方式来解决, 改成@Autowired 属性注入即可。