当前位置:网站首页>@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
边栏推荐
- C#获取exe的版本号-文件版本and程序集版本
- Summary of small problems in smartbugs installation
- VectorDraw Web Library 10.10
- smartBugs安装小问题总结
- Manufacturing process of PCB 2021-10-11
- MySQL facet 01
- China Mobile MCU product information
- Usememo simulation usecallback
- Insert and sort the linked list [dummy unified operation + broken chain core - passive node]
- MySQL face Scripture eight part essay
猜你喜欢

函数模板_类模板

VectorDraw Web Library 10.10

【QT】Qt 5 的程序:打印文档

Introduction to Sichuan Tuwei ca-is3082wx isolated rs-485/rs-422 transceiver

图扑软件数字孪生 3D 风电场,智慧风电之海上风电

Modular programming of wireless transmission module nRF905 controlled by single chip microcomputer
![[Batch dos - cmd Command - Summary and Summary] - cmd extension Command, extension Function (CMD / E: on, CMD / E: off)](/img/2b/4495a6cd41a2dd4e7a20ee60b398c9.png)
[Batch dos - cmd Command - Summary and Summary] - cmd extension Command, extension Function (CMD / E: on, CMD / E: off)

搞清信息化是什么,让企业转型升级走上正确的道路

Shell tips (134) simple keyboard input recorder

Four software 2021-10-14 suitable for beginners to draw PCB
随机推荐
Cglib dynamic proxy
realsense d455 semantic_slam实现语义八叉树建图
AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘
Understand the reasons for impedance matching of PCB circuit board 2021-10-07
php入门基础记录
【QT】Qt 5 的程序:打印文档
STL教程4-输入输出流和对象序列化
Find out what informatization is, and let enterprises embark on the right path of transformation and upgrading
Runtime - Methods member variable, cache member variable
“空间转换”显著提升陡崖点云的地面点提取质量
【Qt】快捷键
el-input实现尾部加字
Static bit rate (CBR) and dynamic bit rate (VBR)
realsense d455 semantic_ Slam implements semantic octree mapping
RTKLIB-b33版本中GALILEO广播星历存储问题
AttributeError: ‘Upsample‘ object has no attribute ‘recompute_ scale_ factor‘
Notes: [open class] neural network and deep learning -- tensorflow2.0 actual combat [Chinese course]
lebel只想前面有星号,但是不想校验
C Getting Started tutorial
Can I open a stock account with a compass? Is it safe?