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

时间:2015-05-12 10:32:36

标签: java spring

根据@Autowired javadoc

  

将构造函数,字段,setter方法或配置方法标记为自动装配   通过Spring的依赖注入设施。只有一个构造函数(at   任何给定bean类的max)都可以带有这个注释,表示   构造函数在用作Spring bean时自动装配。这样的构造函数   不必公开。字段是在之后注入的   在调用任何配置方法之前构造bean。这样的   配置字段不必是公共的。配置方法可能有一个   任意名称和任意数量的参数;每个论点   将在Spring容器中使用匹配的bean自动装配。

     

Bean属性设置器方法实际上只是这种的特例   一般配置方法。这种配置方法不必是公开的。   在多参数方法的情况下,需要'参数是   适用于所有论点。如果是收藏或地图   依赖类型,容器将自动装配所有与之匹配的bean   声明的值类型。如果是Map,则必须将键声明为   键入String并将解析为相应的bean名称。注意   实际注入是通过BeanPostProcessor执行的   反过来意味着你不能使用@Autowired注入引用   BeanPostProcessor或BeanFactoryPostProcessor类型。请咨询   AutowiredAnnotationBeanPostProcessor类的javadoc(其中,   默认情况下,检查是否存在此批注。)

我的问题是:

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

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

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

  4.   

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

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

3 个答案:

答案 0 :(得分:5)

// create a transparent base image that we will merge the cropped images into. $img = new Img(); $img->create(400, 400, true); // first image; crop and merge with base. $img2 = new Img('./crop_1.png'); $img2->circleCrop(); $img->merge($img2, 50, 50); // second image; crop and merge with base. $img3 = new Img('./crop_2.png'); $img3->circleCrop(); $img->merge($img3, 25, 200); $img->render(); 注释可以与构造函数,setter方法或任何其他方法一起使用。 每当Spring找到@Autowired注释时,它将尝试查找与方法参数匹配的bean,并将调用该方法。如果多个方法(setter或non-setter)具有@Autowired注释,那么在bean实例化之后Spring将调用所有方法。

答案 1 :(得分:0)

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

Arch  | Layers | Score | Time
A     | 1      | 0.3   | 10
A     | 1      | 0.6   | 20
A     | 1      | 0.7   | 30
B     | 2      | 0.7   | 10
B     | 2      | 0.8   | 20
B     | 2      | 0.8   | 30

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

答案 2 :(得分:0)

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

您已经知道的Setter就像setXXX

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