根据@Autowired javadoc https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/annotation/Autowired.html:
将构造函数、字段、setter 方法或配置方法标记为自动装配
通过 Spring 的依赖注入工具。只有一个构造函数(位于
任何给定 bean 类的 max) 都可以带有此注释,指示
用作 Spring bean 时自动装配的构造函数。这样的构造函数
不一定要公开。字段在之后立即注入
在调用任何配置方法之前构建 bean。这样一个
配置字段不必是公共的。配置方法可能有一个
任意名称和任意数量的参数;这些论点中的每一个
将自动装配 Spring 容器中的匹配 bean。
Bean 属性设置方法实际上只是此类的一个特例
通用配置方法。此类配置方法不必是公共的。
在多参数方法的情况下,“必需”参数是
适用于所有参数。如果是集合或地图
依赖类型,容器将自动装配所有匹配的bean
声明值类型。对于 Map,键必须声明为
类型 String 并将被解析为相应的 bean 名称。笔记
实际的注入是通过 BeanPostProcessor 执行的
反过来意味着你不能使用@Autowired将引用注入到
BeanPostProcessor 或 BeanFactoryPostProcessor 类型。请咨询
AutowiredAnnotationBeanPostProcessor 类的 javadoc(其中,
默认情况下,检查此注释是否存在)。
我的问题是:
是什么意思配置方法?
另外,假设我有一个 setter 方法@Autowired
和一些任意方法@Autowired
。我假设 setter 方法是在 bean 实例化后由 spring 自动调用的,而随机命名的@Autowired
方法不会被调用,对吗?
Spring 如何理解哪个@Autowired
方法应该在实例化(setter)之后调用,而其他方法则不应该?这与 javadoc 的声明有何关联,该声明表示:
Bean 属性设置方法实际上只是一个特例
这样一个通用的配置方法
最后一个问题:我可以在哪里阅读相关内容?因为 spring 文档没有任何相关信息,而且我无法在其 javadoc 中找到 spring 使用的确切逻辑。
@Autowired
注解可以与构造函数、setter 方法或任何其他方法一起使用。
每当春天发现@Autowired
注解它将尝试找到与方法参数匹配的 bean 并调用该方法。如果有多个方法(setter 或 non-setter)@Autowired
注解,所有这些都会在bean实例化后由Spring调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)