Spring中@Autowired和@Resource区别

Spring可以基于注解方式配置并注入依赖。在Java代码中使用@Resource或者@Autowired注解方式注入。
1。 @Resource:
1)默认按照名称装配注入,只有当找不到与名称name匹配的bean时才会按照类型Type注入。
2)@Resource注解由J2EE提供,包名是javax.annotation.Resource,需要导包,但是Spring支持该注解的注入。
3)@Resource可以书写标注在字段或者该字段的setter方法上面,
4)@Resource装配的顺序:
1》如果同时指定name和type,则从spring上下文中找到唯一匹配的bean进行装配,找不到就抛出异常。
2》如果指定name,则从上下文中查找名称id匹配的bean进行装配,找不到则抛出异常。
3》如果指定type,则从上下文中找到类似匹配的唯一bean进行装配,唯一意味着一,不能多或没有,否则都会抛出异常。
4》如果没有type也没有name,则自动按照byName进行装配;如果没有匹配就回退原始类型匹配,如果匹配就自动装配。

举例:
1)UserServiceImpl.java

public class UserServiceImpl {
    // 下面两种@Resource只要使用一种即可
    @Resource(name="userDao")
    private UserDao userDao; // 用于字段上

    @Resource(name="userDao")
    public void setUserDao(UserDao userDao) { // 用于属性的setter方法上
        this.userDao = userDao;
    }
}

2。@Autowired
1)默认是按照类型Type装配注入的,如果需要按照名称装配注入,需要结合@Qualifier一起使用,
2)@Autowired可以书写标注在字段或者该字段的setter方法上面,
3)@Autowired是由spring提供,需要导入包org.springframework.beans.factory.annotation.Autowired,故减少系统对spring的依赖建议使用,

举例:
1)UserServiceImpl.java

public class UserServiceImpl {
    // 下面两种@Autowired只要使用一种即可
    @Autowired
    private UserDao userDao; // 用于字段上
    @Autowired
     public void setUserDao(UserDao userDao) { // 用于属性的方法上
        this.userDao = userDao;
    }
}

3。@Qualifier:
可与Autowired一起使用,如果@Autowired需要按照名称装配。
举例:

public class UserServiceImpl {
//联合使用
**@Autowired
@Qualifier("userDao")**
private UserDao userDao; 

}

猜你喜欢

转载自blog.csdn.net/qq_33313532/article/details/73057259