Spring 推断构造方法

文章目录


内容总结

实例化

Spring 自行创建 Bean 的规则如下

  • 默认使用无参构造方法, 只有一个有参时用有参, 有多个有参时报错
  • 多个有参, 且其中一个上有 @Autowired 注解: 用有 @Autowired 注解的那个, 且 Spring 自动注入参数值. 注意 @Primary/@Order/Ordered 等无此效果
  • 当类是延迟加载或原型作用域时, 可以使用 getBean(String name, Object… args) 或 BeanDefinition.getConstructorArgumentValues().addGenericArgumentValue(new XxxObject()) 手动指定构造方法, 找不到则报错
  • 让 Spring 自动选择构造方法以及参数值
    • XML 时, autowire=“constructor”
    • Annotation 时, BeanDefinition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_CONSTRUCTOR)

选择构造方法

  • 默认, 用无参构造方法, 如果没有无参构造方法, 但有一个其他的, 就用这一个
  • 指定了构造方法入参值, 通过 getBean 或 BeanDefinition, 那就用参数匹配的构造方法
  • 指定 autowire=constructor, 让 Spring 自动选择构造方法及入参值
  • 指定 @Autowired 注解到某个构造方法, 希望 Spring 自动找该构造方法的入参值

猜你喜欢

转载自blog.csdn.net/mrathena/article/details/134418819