spring 注解@Resource 和 @Autowired
来源:互联网 发布:淘宝上的桃胶是真的吗 编辑:程序博客网 时间:2024/05/16 17:56
1.@Resource有一个‘name’属性,缺省时,Spring 将这个值解释为要注射的 bean 的名字。换句话说,如果遵循by-name的语法,如下例:
- <span>public class SimpleMovieLister {
- private MovieFinder movieFinder;
- @Resource(name="myMovieFinder")
- public void setMovieFinder(MovieFinder movieFinder) {
- this.movieFinder = movieFinder;
- }
- }</span>
如果没有显式地给出名字,缺省的名字将继承于字段名或者 setter 方法名:如果是字段名,它将简化或者等价于字段名;如果是 setter 方法名,它将等价于 bean 属性名。下面这个例子使用名字 "movieFinder" 注射到它的 setter 方法:
- <span>public class SimpleMovieLister {
- private MovieFinder movieFinder;
- @Resource
- public void setMovieFinder(MovieFinder movieFinder) {
- this.movieFinder = movieFinder;
- }
- }</span>
重要的是他还可以在前面几种情况不满足的时候按类型来找:@Resource可以回退为与标准 bean 类型匹配
下面的例子有一个customerPreferenceDao字段,首先要查找一个名叫 “customerPreferenceDao” 的 bean,然后回退为一个原始类型以匹配类型CustomerPreferenceDao。"context" 字段将基于已知解决的依赖类型ApplicationContext而被注入。
- <span>public class MovieRecommender {
- @Resource
- private CustomerPreferenceDao customerPreferenceDao;
- @Resource
- private ApplicationContext context;
- public MovieRecommender() {
- }
- // ...
- }</span>
2.@Autowired默认是按byType的,然后才会退到按byName,和@Resource类似
@Autowired 注解可以用于“传统的”setter 方法,如下例:
- public class SimpleMovieLister {
- private MovieFinder movieFinder;
- @Autowired
- public void setMovieFinder(MovieFinder movieFinder) {
- this.movieFinder = movieFinder;
- }
- // ...
- }
这个注解也可以用于以属性为参数/多个参数的方法
- public class MovieRecommender {
- private MovieCatalog movieCatalog;
- private CustomerPreferenceDao customerPreferenceDao;
- @Autowired
- public void prepare(MovieCatalog movieCatalog, CustomerPreferenceDao customerPreferenceDao) {
- this.movieCatalog = movieCatalog;
- this.customerPreferenceDao = customerPreferenceDao;
- }
- // ...
- }
@Autowired注解甚至可以用于构造器与字段:
- public class MovieRecommender {
- @Autowired
- private MovieCatalog movieCatalog;
- private CustomerPreferenceDao customerPreferenceDao;
- @Autowired
- public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
- this.customerPreferenceDao = customerPreferenceDao;
- }
- // ...
- }
也可以一种提供来自ApplicationContext的特殊类型的所有 beans,注解字段或者方法,例如:
- public class MovieRecommender {
- @Autowired
- private MovieCatalog[] movieCatalogs;
- // ...
- }
这同样适用于集合类型:
- public class MovieRecommender {
- private Set<MovieCatalog> movieCatalogs;
- @Autowired
- public void setMovieCatalogs(Set<MovieCatalog> movieCatalogs) {
- this.movieCatalogs = movieCatalogs;
- }
- // ...
- }
甚至是 Maps 也可以这样注解,只要这个 Map 的 key 类型为 String。这个 Map 的 values 应该是已知的类型,并且 keys 应该包含符合 bean 的命名:
- public class MovieRecommender {
- private Map<String, MovieCatalog> movieCatalogs;
- @Autowired
- public void setMovieCatalogs(Map<String, MovieCatalog> movieCatalogs) {
- this.movieCatalogs = movieCatalogs;
- }
- // ...
- }
在缺省情况下,当出现0个候选的 beans时自动连接将失败;缺省行为把连接方法,构造器,字段假设为 required 的依赖。这样的行为如下所示:
- public class SimpleMovieLister {
- private MovieFinder movieFinder;
- @Autowired(required=false)
- public void setMovieFinder(MovieFinder movieFinder) {
- this.movieFinder = movieFinder;
- }
- // ...
- }
@Autowired也能用于总所周知的“可解决的依赖”:BeanFactory接口,ApplicationContext接口,ResourceLoader接口,ApplicationEventPublisher接口,还有MessageSource接口。这些接口(还有它们的扩展,例如ConfigurableApplicationContext或者ResourcePatternResolver)将可以自动解决依赖,没有任何特殊必须的其它步骤需要。
- public class MovieRecommender {
- @Autowired
- private ApplicationContext context;
- public MovieRecommender() {
- }
- // ...
- }
- spring 注解@Resource 和 @Autowired
- Spring 注解 @Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring注解@Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring注解 @Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- spring注解---@Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- spring---注解@Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring @Resource和@Autowired注解
- Java中@Resource注解和@Autowired注解(spring中的@Autowired)
- Spring @Autowired @Resource注解
- yii ajaxfrom 校验
- HDOJ 1712
- 标准C++中的string类的用法总结
- 【程序10】 题目:打印楼梯,同时在楼梯上方打印两个笑脸
- Multiprocessing Basics in Python
- spring 注解@Resource 和 @Autowired
- 登录机房收费系统遇到的问题
- 使用copy再次实现Circle类,保证不能有内存泄漏问题
- CCLabelAtlas 获取数字
- 记录一个vector reserve的silly question
- C# 基础知识 (二).独特的知识及用法篇
- 黑马程序员 另一道内存分配的面试题
- GC13:XO独占游戏《神鬼寓言传奇》公布
- 简明 Vim 练级攻略