Spring @Autowired for setter方法与非setter方法

根据@Autowired javadoc :

将构造函数,字段,setter方法或配置方法标记为由Spring的dependency injection工具自动assembly。 任何给定bean类只有一个构造函数(最大值)可以带有这个注释,指示构造函数在用作Spring bean时要自动assembly。 这样的构造函数不必公开。 在调用任何配置方法之前,在构造bean之后立即注入字段。 这样的配置字段不必是公共的。 配置方法可以有任意名称和任意数量的参数; 每个参数都将使用Spring容器中的匹配bean进行自动assembly。

Bean属性setter方法实际上只是这种 通用配置方法的 一个特例 。 这种配置方法不必是公开的。 在多参数方法的情况下,’required’参数适用于所有参数。 如果是Collection或Map依赖类型,容器将自动assembly与声明的值类型匹配的所有bean。 如果是Map,则必须将键声明为String类型,并将其解析为相应的bean名称。 请注意,实际注入是通过BeanPostProcessor执行的,而BeanPostProcessor又意味着您无法使用@Autowired将引用注入BeanPostProcessor或BeanFactoryPostProcessor类型。 请参考javadoc获取AutowiredAnnotationBeanPostProcessor类(默认情况下,它会检查是否存在此批注)。

我的问题是:

  1. 配置方法是什么意思?

  2. 而且,假设我有@Autowired的setter方法和@Autowired一些任意方法。 我假设在bean实例化之后,spring会自动调用setter方法,而不会调用随机命名的@Autowired方法,对不对?

  3. 另外spring如何理解在实例化(setter)之后应该调用哪个@Autowired方法,而其他方法不应该? 这与javadoc的声明有何关联,并说:

Bean属性setter方法实际上只是这种通用配置方法的一个特例

最后一个问题: 我可以在哪里阅读它? 因为spring文档没有关于它的任何信息,我无法在其javadoc中找到spring使用的确切逻辑。

@Autowired注释可以与构造函数,setter方法或任何其他方法一起使用。 每当Spring发现@Autowired注释时,它将尝试查找与方法参数匹配的bean,并将调用该方法。 如果多个方法(setter或non-setter)具有@Autowired注释,那么在bean实例化之后Spring将调用所有方法。

配置方法是类似工厂的方法,在这种情况下会自动连接参数:

 @Autowired public SomeObject initSomeObject(Object1 o1, Object2 o2, ...) { 

@Autowired仅确保Spring将(尝试)提供所需的参数。

此上下文中的Config-method指的是您在init-method@PostConstruct下指定init-method

您已经知道的Setter就像setXXX

所以很明显找到哪个是没有困难的。 同时注意弹簧不能基于参数名称自动assembly。