繁体   English   中英

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

[英]Spring @Autowired for setter methods vs non-setter methods

根据@Autowired javadoc

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

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

我的问题是:

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

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

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

Bean属性设置器方法实际上只是这种通用配置方法的特例

最后一个问题: 我可以在哪里阅读它? 因为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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM