@Resource、@Autowired和default-autowire区别联系

 

一、@Resource与@Autowired的区别?

 

1.@Autowired按byType自动注入。具体工作原理如下:

1、根据类型(byType)找到所有满足条件的bean

2、判断bean长度,如果没有,则根据@Autowired中的required属性进行判断是否抛出异常(默认为true)

3、如果多于一个,则尝试寻找最优的那一个,如果最优的未找到,则抛出异常 

4、如果只有一个,则直接使用此bean

 

2.@Resource默认按byName自动注入。具体工作原理如下:

1、获取名称,判断容器中是否存在此name(id)的bean

2、如果存在,则直接使用此name进行查询

3、@Resource如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。

4、退化到默认的autowire查找方式

但是@Resource有两个属性是比较重要的,分是name和type;

如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略;

 

@Autowired是spring自己定义的注解,@Resource是J2EE的,由JSR-250规范定义。

 

二、@Autowired、@Resourcedefault-autowire="byType"、default-autowire="byName"有什么关系呢?

 

确切的说,没有什么关系。

Annotation注入和autowire是没有关系的。

Autowire的功能是在application context里实现的,

而annotation注入的功能是通过BeanPostProcessor来实现的。无论你是否autowire,只要你写了@Resourc​e或@Autowired注解,对象就会被注入。

 

 

猜你喜欢

转载自javis163.iteye.com/blog/1685168