Resource和Autowired区别
1.使⽤场景
北京第一实验小学@Resource和@Autowired都是做bean注⼊时使⽤
@Resource是jdk的注解,不是spring的注解;由包javax.annotation.Resource提供,需要导⼊,但是Spring⽀持该注解注⼊
2.相同点,不同点
共同点:两者都可以写在tter⽅法,和字段上,不需要再写tter⽅法
不同点:
2.1 @Autowired是spring提供的注解,只按照byType注⼊
public class TestServiceImpl {
// 下⾯两种@Autowired只要使⽤⼀种即可
@Autowired
private UrDao urDao; // ⽤于字段上
@Autowired
public void tUrDao(UrDao urDao) { // ⽤于属性的⽅法上
this.urDao = urDao;
fip
}
}
Autowired是按照类型byType装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置required属性值为fal。如果想按照名称(byName)来装配,可以结合Qualifier注解⼀起使⽤
(通过类型匹配多个candidate,在没有Qualifier的情况下,会使⽤对象名作为最后的fallback匹配)
public class TestServiceImpl {
@Autowired
@Qualifier("urDao")
private UrDao urDao;
}
2.2 @Resource
Resource默认是按照ByName⾃动注⼊的,@Resource有两个属性:name和type
spring将@Resource注解的name属性解析为bean的名字,⽽type属性则解析为bean的类型
如果使⽤name属性,使⽤byName⾃动注⼊策略,⽽使⽤ type属性时则使⽤byType⾃动注⼊策略
如果既不指定name也不指定type属性,这是将通过反射机制使⽤byName⾃动注⼊策略
承担英文public class TestServiceImpl {
// 下⾯两种@Resource只要使⽤⼀种即可
@Resource(name="urDao")summer holiday
报考类别怎么填
private UrDao urDao; // ⽤于字段上
@Resource(name="urDao")
public void tUrDao(UrDao urDao) { // ⽤于属性的tter⽅法上
this.urDao = urDao;
mpj
}美国队长女主角
}
@Resource装配顺序:
①如果同时指定了name和type,则从Spring上下⽂中找到唯⼀匹配的bean进⾏装配,找不到则抛出异常。
②如果指定了name,则从上下⽂中查找名称(id)匹配的bean进⾏装配,找不到则抛出异常。
③如果指定了type,则从上下⽂中找到类似匹配的唯⼀bean进⾏装配,找不到或是找到多个,都会抛出异常。
④如果既没有指定name,⼜没有指定type,则⾃动按照byName⽅式进⾏装配;如果没有匹配,则回退为⼀个原始类型进⾏匹配,如果匹配则⾃动装配。
@Resource的作⽤相当于@Autowired,只不过@Autowired按照byType⾃动注⼊。
在启动spring的时候,⾸先要启动容器;
韩语网校启动spring容器时,会默认寻找容器扫描范围内的可加载bean,然后查找哪些bean上的属性和⽅法上有@Resource注解;
找到@Resource注解后,判断@Resource注解括号中的name属性是否为空,如果为空:看spring容器中的bean的id与@Resource要注解的那个变量属性名是否相同,如相同,匹配成功;如果不相同,看spring容器中bean的id对应的类型是否与@Resource要注解的那个变量属性
有关爱国的演讲稿
对应的类型是否相等,若相等,匹配成功,若不相等,匹配失败。
snort如果@Resource注解括号中的name属性不为空,看name的属性值和容器中的bean的id名是否相等,如相等,则匹配成功;如不相等,则匹配失败。