首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring @Autowired for setter方法与非setter方法

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

Stack Overflow用户
提问于 2015-05-12 10:32:35
回答 3查看 11.3K关注 0票数 7

根据@Autowired javadoc

将构造函数、字段、setter方法或config方法标记为由Spring的依赖注入工具自动生成。任何给定bean类的构造函数(最多只有一个构造函数)可以携带此注释,这表明构造函数在作为Spring使用时可以自动生成。这样的构造函数不一定是公开的。字段是在构建bean之后,在调用任何配置方法之前注入的。这样的配置字段不必是公共的。Config方法可能具有任意名称和任意数量的参数;这些参数中的每个参数都将在Spring容器中使用匹配的bean自动处理。 Bean属性设置器方法实际上只是通用配置方法的特例。这样的配置方法不必是公共的。对于多个参数方法,“必需”参数适用于所有参数。在集合或Map依赖类型的情况下,容器将自动生成与声明的值类型匹配的所有bean。对于Map,必须将键声明为String类型,并将其解析为相应的bean名称。请注意,实际的注入是通过BeanPostProcessor执行的,这意味着您不能使用@Autowired将引用注入到BeanPostProcessor或BeanFactoryPostProcessor类型。请查阅AutowiredAnnotationBeanPostProcessor类的javadoc (默认情况下,该类检查是否存在此注释)。

我的问题是:

  1. 配置方法是什么意思?
  2. 另外,假设我有一个带有@Autowired的setter方法,还有一些带有@Autowired的任意方法。我假设setter方法在bean实例化后由spring自动调用,而随机命名的@Autowired方法不会被调用,对吗?
  3. 另外,spring如何理解实例化(setters)之后应该调用哪个@Autowired方法,而其他方法不应该调用?这与javadoc的声明有何关联,声明:

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

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

EN

回答 3

Stack Overflow用户

发布于 2015-05-12 10:40:04

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

票数 7
EN

Stack Overflow用户

发布于 2015-05-12 10:39:56

config方法是一种类似于工厂的方法,在这种情况下,它会自动获得参数:

代码语言:javascript
复制
@Autowired
public SomeObject initSomeObject(Object1 o1, Object2 o2, ...) {

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

票数 1
EN

Stack Overflow用户

发布于 2015-05-12 10:45:21

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

正如你已经知道的,Setter就像setXXX

所以很明显,找出哪一种是没有困难的。同时要注意的是,弹簧不能基于参数名称自动生成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30188262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档