Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.9.7 @Resource

6.9.7 @Resource

Spring还支持在字段或bean属性setter方法上使用JSR-250 @Resource注释进行注入。 这是Java EE 56中的常见模式,例如在JSF 1.2管理的beanJAX-WS 2.0端点中。 对于由Spring管理对象支持这种模式。

@Resource采用name属性,默认情况下,Spring将该值解释为要注入的bean名称。 换句话说,它遵循by-name语义,如本例所示:

public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Resource(name="myMovieFinder")
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

}

如果未明确指定名称,则默认名称是从字段名称或setter方法派生的。如果是字段,则采用字段名称; setter方法的情况下,它采用bean属性名称。 所以下面的例子将把名为“movieFinder”bean注入其setter方法:

public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Resource
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

}

借助CommonAnnotationBeanPostProcessor识别的ApplicationContext,该提供的名称解析为bean名称。如果您明确配置SpringSimpleJndiBeanFactory,则可以通过JNDI解析名称。但是,建议您依赖默认行为,仅仅使用SpringJNDI查找功能来持间接级别。

在没有指定明确的名称且类似于@Autowired@Resource用法的特殊情况下,@ Resource寻找主要类型匹配而不是特定名称的bean,并解析众所周知的可解析依赖项:BeanFactoryApplicationContextResourceLoaderApplicationEventPublisher, 和MessageSource接口。

因此,在以下示例中,customerPreferenceDao字段首先查找名为customerPreferenceDaobean,然后回到CustomerPreferenceDao类型的主类型匹配。 基于已知的可解析依赖类型ApplicationContext注入context”字段。

public class MovieRecommender {

    @Resource
    private CustomerPreferenceDao customerPreferenceDao;

    @Resource
    private ApplicationContext context;

    public MovieRecommender() {
    }

    // ...

}

原文地址:https://www.cnblogs.com/springmorning/p/10411750.html