将构造函数、字段、setter方法或config方法标记为由Spring的依赖注入工具自动生成。任何给定bean类的构造函数(最多只有一个构造函数)可以携带此注释,这表明构造函数在作为Spring使用时可以自动生成。这样的构造函数不一定是公开的。字段是在构建bean之后,在调用任何配置方法之前注入的。这样的配置字段不必是公共的。Config方法可能具有任意名称和任意数量的参数;这些参数中的每个参数都将在Spring容器中使用匹配的bean自动处理。 Bean属性设置器方法实际上只是通用配置方法的特例。这样的配置方法不必是公共的。对于多个参数方法,“必需”参数适用于所有参数。在集合或Map依赖类型的情况下,容器将自动生成与声明的值类型匹配的所有bean。对于Map,必须将键声明为String类型,并将其解析为相应的bean名称。请注意,实际的注入是通过BeanPostProcessor执行的,这意味着您不能使用@Autowired将引用注入到BeanPostProcessor或BeanFactoryPostProcessor类型。请查阅AutowiredAnnotationBeanPostProcessor类的javadoc (默认情况下,该类检查是否存在此注释)。
我的问题是:
@Autowired的setter方法,还有一些带有@Autowired的任意方法。我假设setter方法在bean实例化后由spring自动调用,而随机命名的@Autowired方法不会被调用,对吗?@Autowired方法,而其他方法不应该调用?这与javadoc的声明有何关联,声明:Bean属性setter方法实际上只是这样一个通用配置方法的特例。
最后一个问题是:在哪里可以阅读到?,因为spring文档中没有这方面的任何信息,而且我无法在它的javadoc中找到spring使用的确切逻辑。
发布于 2015-05-12 10:40:04
@Autowired注释可以与构造函数、setter方法或任何其他方法一起使用。每当Spring找到@Autowired注释时,它都会尝试查找与方法参数匹配的bean,并调用该方法。如果多个方法(setter或non)都有@Autowired注释,则所有方法都将在bean实例化后由Spring调用。
发布于 2015-05-12 10:39:56
config方法是一种类似于工厂的方法,在这种情况下,它会自动获得参数:
@Autowired
public SomeObject initSomeObject(Object1 o1, Object2 o2, ...) {@Autowired只是确保Spring将(尝试)提供所需的参数。
发布于 2015-05-12 10:45:21
此上下文中的Config-方法是指在init-method或@PostConstruct下指定的方法。
正如你已经知道的,Setter就像setXXX
所以很明显,找出哪一种是没有困难的。同时要注意的是,弹簧不能基于参数名称自动生成。
https://stackoverflow.com/questions/30188262
复制相似问题