@Autowired任意配置方法

时间:2015-01-16 21:51:13

标签: java spring

在Spring参考指南中,它表示您可以将@Autowired注释应用于具有任意名称和/或多个参数的方法,如以下代码所示。

public class MovieRecommender {

    private MovieCatalog movieCatalog;

    private CustomerPreferenceDao customerPreferenceDao;

    @Autowired
    public void prepare(MovieCatalog movieCatalog,
            CustomerPreferenceDao customerPreferenceDao) {
        this.movieCatalog = movieCatalog;
        this.customerPreferenceDao = customerPreferenceDao;
    }

    // ...

}

但是Spring容器不会调用prepare()方法,因为它不是setter方法。 @Autowired如何在这种情况下工作?

3 个答案:

答案 0 :(得分:2)

它并没有说你可以将@Autowired用于任何方法

  

配置方法 可能有任意名称和任意数量的参数;每个参数都将使用Spring容器中的匹配bean进行自动装配。

<beans>
<bean id="myBean" class="..." init-method="prepare"/>
</beans>

答案 1 :(得分:2)

注释@Autowired并不关心您使用的是哪个方法名称。因此,类似prepare的方法名称与setMovieCatalog的方法名称一样有用。

此外,Spring还使用@Autowired处理方法中的多个参数。这通常用于基于构造函数的注入,但对于其他方法(例如prepare - 方法)可以正常工作。

那么,做这项工作需要什么?好吧,首先,该方法的参数必须是Spring上下文已知的bean。这意味着必须在XML上下文中连接bean,并使用@Component@Bean类中的@Configuration进行注释。其次,保存@Autowired方法的类也必须是Spring上下文已知的bean。

如果满足以上两个要求,@Autowired只是按预期工作。无论名称如何,它都可以用于任何实例方法。

答案 2 :(得分:1)

无论方法名称是什么,@ Autowired都会在弹簧上下文初始化期间尝试获取自动连线。