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

6.9.7 @Resource

Spring还支持在字段或bean属性setter方法上使用JSR-250 @Resource注释进行注入。 这是Java EE 5和6中的常见模式,例如在JSF 1.2管理的bean或JAX-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名称。如果您明确配置Spring的SimpleJndiBeanFactory,则可以通过JNDI解析名称。但是,建议您依赖此默认行为,仅仅使用Spring的JNDI查找功能来维持间接级别。

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

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

public class MovieRecommender {

    @Resource
    private CustomerPreferenceDao customerPreferenceDao;

    @Resource
    private ApplicationContext context;

    public MovieRecommender() {
    }

    // ...

}

posted @ 2019-02-21 12:50  编程老司机A  阅读(236)  评论(0)    收藏  举报