乐趣区

关于java:spring自动注入的三种方式AutowiredInjectResource2

一、@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 一起应用

退出移动版