Spring注解注入属性实战:@Autowired与@Resource

4星 · 超过85%的资源 需积分: 10 14 下载量 53 浏览量 更新于2024-07-20 收藏 251KB PDF 举报
"本文主要介绍了如何在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配置,提高代码的可读性和可维护性。在实际开发中,根据项目的具体需求和团队的约定,选择合适的注解方式是十分重要的。