相同之处

@Resoure, @Autowired@Inject 都可以为bean自动注入,都可以在属性,方法上面

对比

来源比较

@Autowired 定义在spring org.springframework.bean.factory package中
@Resource 定义在javax.annotation package 中
@Inject 定义在avax.inject package 中

注入方式

@Autowired 默认是按照按照类型装配,默认情况下装配的对象必须存在,允许不存在需要设置@Autowired(required=false),如果在同一容器存在多个相同类型的Bean,没有指出注入bean 的名字时候会出现BeanCreationException异常。这时候如果使用@Qualifier就会按照指定预注入类型名称,如果没有按照类型注入。
@Resource 是在java ee 1.5 之后提出的模式,默认按照名称来进行装配。名称可以通过name进行设置,如果没有设置,根据默认的名称来进行查找,如果按照名称没有找到就会按照类型来进行查找。按照类型查找的过程中,找不到就可以使用@Qualifier来指定预注入类型名称。

@Inject 类似于@Autowired的注入方式

例子:

1
2
3
@Autowired
@Qualifier(benci)
private Car toyota ;

@Autowired 查找顺序:1.查找Car类型的bean,如果找到而且唯一并且toyota对应与则注入成功,如果多个,则用@Qualifier指定的名字去查找这个bean,找到注入成功,找不到就会出现异常

@Resource 查找顺序:1.查找toyota名称有没有对应的bean,有则注入成功,没有则使用@Qualifier指定的名字去查找这个bean,找到注入成功,找不到就会出现异常

@Autowired在使用的过程中注意bean类型是否存在多个的情况。