Spring注解注入属性实战:@Autowired与@Resource
![](https://csdnimg.cn/release/wenkucmsfe/public/img/star.98a08eaa.png)
"本文主要介绍了如何在Spring框架中使用注解进行属性注入,包括传统的XML配置方式以及使用@Autowired和@Resource注解的实践方法。" 在Spring框架中,注解的使用极大地简化了bean的配置和依赖注入过程。在介绍Spring注解使用之前,让我们回顾一下在不使用注解时是如何注入属性的。例如,为了将`UserDao`注入到`UserManagerImpl`中,我们需要在`UserManagerImpl`类中定义一个setter方法,并在XML配置文件中指定`userDao`属性的引用,如上述代码所示。这种方式虽然直观,但当项目中的bean数量增多时,XML配置文件会变得庞大且难以维护。 现在,让我们来看看Spring提供的注解方式,特别是`@Autowired`和`@Resource`注解,它们可以替代XML配置实现依赖注入。 1. `@Autowired`注解 `@Autowired`是Spring框架中最常用的注解之一,它用于自动装配bean的依赖。在`UserManagerImpl`类中,我们可以在成员变量`userDao`上直接使用`@Autowired`,这样Spring容器就会自动寻找类型匹配的bean并注入。如果存在多个匹配的bean,可以通过指定`@Qualifier`注解来指定特定的bean。不过,直接在成员变量上使用`@Autowired`不推荐,因为它会使得代码难以测试(因为无法通过构造函数或setter方法模拟依赖)。因此,更推荐的方式是在setter方法上使用`@Autowired`,这样既能实现依赖注入,又保持了测试友好性。 ```java public class UserManagerImpl implements UserManager { private UserDao userDao; @Autowired public void setUserDao(UserDao userDao) { this.userDao = userDao; } } ``` 2. `@Resource`注解 `@Resource`注解也是用来进行依赖注入的,但它与`@Autowired`的主要区别在于查找依赖的策略。`@Autowired`默认按类型匹配,而`@Resource`则首先按名称匹配,其次按类型匹配。`@Resource`通常用于JSR-250规范,它的`name`属性可以明确指定bean的ID。 ```java public class UserManagerImpl implements UserManager { @Resource(name = "userDao") private UserDao userDao; } ``` 在使用`@Autowired`和`@Resource`时,需要注意的是,它们需要配合`@Component`、`@Service`、`@Repository`或`@Controller`等组件注解一起使用,这些注解会告诉Spring哪些类是bean,这样才能进行注解驱动的依赖注入。同时,还需要开启Spring的注解配置,这通常在XML配置文件中通过`<context:component-scan>`标签实现,或者在Java配置类中使用`@ComponentScan`注解。 总结起来,Spring注解使得bean的创建和依赖注入更加简洁和灵活。通过`@Autowired`和`@Resource`,我们可以避免编写大量的XML配置,提高代码的可读性和可维护性。在实际开发中,根据项目的具体需求和团队的约定,选择合适的注解方式是十分重要的。
![](https://csdnimg.cn/release/download_crawler_static/9680563/bg7.jpg)
![](https://csdnimg.cn/release/download_crawler_static/9680563/bg8.jpg)
剩余37页未读,继续阅读
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/944cef25fdfb4de7bb1d004a0b8be41a_gaomingmingming.jpg!1)
- 粉丝: 1
- 资源: 29
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 多模态联合稀疏表示在视频目标跟踪中的应用
- Kubernetes资源管控与Gardener开源软件实践解析
- MPI集群监控与负载平衡策略
- 自动化PHP安全漏洞检测:静态代码分析与数据流方法
- 青苔数据CEO程永:技术生态与阿里云开放创新
- 制造业转型: HyperX引领企业上云策略
- 赵维五分享:航空工业电子采购上云实战与运维策略
- 单片机控制的LED点阵显示屏设计及其实现
- 驻云科技李俊涛:AI驱动的云上服务新趋势与挑战
- 6LoWPAN物联网边界路由器:设计与实现
- 猩便利工程师仲小玉:Terraform云资源管理最佳实践与团队协作
- 类差分度改进的互信息特征选择提升文本分类性能
- VERITAS与阿里云合作的混合云转型与数据保护方案
- 云制造中的生产线仿真模型设计与虚拟化研究
- 汪洋在PostgresChina2018分享:高可用 PostgreSQL 工具与架构设计
- 2018 PostgresChina大会:阿里云时空引擎Ganos在PostgreSQL中的创新应用与多模型存储
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)