当前位置:网站首页>@Resource和@Autowired注解的不同,为什么推荐@Resource?

@Resource和@Autowired注解的不同,为什么推荐@Resource?

2022-06-25 06:41:00 jack_bob

2者都可以用来装配bean,在接口仅有单一实现类时,两个注解的修饰效果相同,可以互相替换,不影响使用。
1.
@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用

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

当一个接口有2个实现的情况:
举例:

一个接口:

public interface UserDao {
    public void insert();
}

实现1:

@Repository("userJdbcDao")
public class UserJdbcDao implements UserDao{
    @Override
    public void insert() {
        System.out.println("我是-jdbc-Dao-实现插入操作");
    }
}

实现2:

@Repository("userJndiDao")
public class UserJndiDao implements UserDao{
    @Override
    public void insert() {
        System.out.println("我是-jndi-Dao-实现插入操作");
    }
}

service类:

@Service("userService")
public class UserService {

    @Autowired
    @Qualifier("userJdbcDao")
    private UserDao userDao=null;
    
    public void createUser(){
        userDao.insert();
    }
}

1.此时ide 会检测出你注入的Dao不是唯一,可以采用@Qualifier注解配合使用,指定你要注入哪个dao
2.也可以在实现接口的类上使用:
@Primary 出现冲突时候优先使用哪个实现类

推荐使用:@Resource:

实现类:@Repository(“userJdbcDao”)和service的@Resource(name=“userJdbcDao”) 一定要保持一致
UserJdbcDao 实现类名不一样也不影响

@Repository("userJdbcDao") //生命beanId
public class UserJdbcDao implements UserDao{
    @Override
    public void insert() {
        System.out.println("我是-jdbc-Dao-实现插入操作");
    }
}
@Service("userService")
public class UserService {
    @Resource(name="userJdbcDao")
    private UserDao userDao=null;

    public void createUser(){
        userDao.insert();
    }
}
@SpringBootTest
class TestApplicationTests {

    @Resource(name="userService")
    private UserService userService;

    @Test
    public void testcreateUser(){
        userService.createUser();
    }
}

代码:
测试代码源码地址

文章来自于It老齐001

原网站

版权声明
本文为[jack_bob]所创,转载请带上原文链接,感谢
https://blog.csdn.net/jack_bob/article/details/125343893