SpringMVC中的@Resource、@Autowired和@Qualifier注解的使用和区别

SpringMVC中的@Resource、@Autowired和@Qualifier注解的区别和使用。

在其他类中引入bean时,使用@Resource注解并放置在成员变量或者set方法上部即可。例如UserServiceImpl类中要引入id为“userDaoImpl”的Dao层的bean对象,代码如下:

@Service
public class UserServiceImpl implements UserService
{
    @Resource
    private UserDao userDao;
 
    //忽略其他代码...
}

或者使用@Autowired和@Qualifier注解:

@Service
public class UserServiceImpl implements UserService
{
    @Autowired
    @Qualifier("userDaoImpl")
    private UserDao userDao;

    //忽略其他代码...
}

最上面的代码示例使用@Resource注解引入bean配置并注入类中,其实还可以使用@Autowired注解类代替。@Autowired注解是Spring的自动装配注解,可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。而@Resource注解是J2EE基于JSR-250规范的注解(所属包:javax.annotation.Resource),和@Autowired注解一样起到自动装配的作用。两者的区别如下:

(1)@Resource注解与@Autowired注解都可以用来装配bean,都可以写在成员变量上,或写在参数的setter方法上。

(2)@Resource注解默认按名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,name属性一旦指定,只按照名称进行配置。

(3)@Autowired注解默认按照类型装配,在默认情况下要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如@Autowired(required = false)。如果想使用名称装配可以结合使用@Qualifier注解。如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,也会抛出BeanCreationException异常。我们可以使用@Qualifier配合@Autowired来解决这些问题。

推荐使用:@Resource注解。

发布了354 篇原创文章 · 获赞 208 · 访问量 165万+

猜你喜欢

转载自blog.csdn.net/pan_junbiao/article/details/104198250