一、@Autowired
1、@Autowired 是 spring 自带的注解,通过‘AutowiredAnnotationBeanPostProcessor’类实现的依赖注入;
2、@Autowired 是依据类型进行主动拆卸的,如果找到多个类型雷同的,会依照名称进行匹配,如果名称雷同,会报错,如果须要按指定名称进行拆卸,则须要配合 @Qualifier;
3、@Autowired 有个属性为 required,能够配置为 false,如果配置为 false 之后,当没有找到相应 bean 的时候,零碎不会抛错;
4、@Autowired 能够作用在变量、setter 办法、构造函数上。
a、将 @autowored 写在被注入的成员变量上,就不必再 xml 文件中配置了,在程序中去掉相应的 setter 和 getter 办法,
b、还能够写在构造方法上、setter 办法上
c、@Qualifier
@Qualifier(“XXX”) 中的 XX 是 Bean 的名称,所以 @Autowired 和 @Qualifier 联合应用时,主动注入的策略就从 byType 转变成 byName 了。
不过须要留神的是 @Autowired 能够对成员变量、办法以及构造函数进行正文,而 @Qualifier 的标注对象是成员变量、办法入参、构造函数入参。
二、@Inject
1、@Inject 是 JSR330 (Dependency Injection for Java) 中的标准,须要导入 javax.inject.Inject; 实现注入。
2、@Inject 是依据类型进行主动拆卸的,如果须要按名称进行拆卸,则须要配合 @Named;
3、@Inject 能够作用在变量、setter 办法、构造函数上。
a、将 @Inject 能够作用在变量、setter 办法、构造函数上,和 @Autowired 一样
b、@Named
@Named(“XXX”) 中的 XX 是 Bean 的名称,所以 @Inject 和 @Named 联合应用时,主动注入的策略就从 byType 转变成 byName 了。
三、@Resource
1、@Resource 是 JSR250 标准的实现,须要导入 javax.annotation 实现注入。
2、@Resource 是依据名称进行主动拆卸的,个别会指定一个 name 属性
3、@Resource 能够作用在变量、setter 办法上。
a、@Resource 实例
总结:
1、@Autowired 是 spring 自带的,@Inject 是 JSR330 标准实现的,@Resource 是 JSR250 标准实现的,须要导入不同的包
2、@Autowired、@Inject 用法根本一样,不同的是 @Autowired 有一个 request 属性
3、@Autowired、@Inject 是默认依照类型匹配的,@Resource 是依照名称匹配的
4、@Autowired 如果须要依照名称匹配须要和 @Qualifier 一起应用,@Inject 和 @Name 一起应用